Sub Station Alpha v4

Формат Скрипта Sub Station Alpha v4.00+

1. Основная информация

2. Основные термины и понятия

3. Разделы скрипта Sub Station Alpha

4. Типы строк в SSA-скрипте

5. Заголовок скрипта, раздел [Script Info]

6. Определение стилей, раздел [v4 Styles]

7. Событие Dialogue, раздел [Events]

8. Событие Comment, раздел [Events]

9. Событие Picture, раздел [Events]

10. Событие Movie, раздел [Events]

11. Событие Sound, раздел [Events]

12. Событие Command, раздел [Events]

Приложение A: Коды переопределения стиля

Приложение B: Правила кодирования шрифтов/изображений

Этот документ содержит описание формата SSA (англоязычный вариант доступен на сайте http://www.eswat.demon.co.uk). Все изменения и отличия формата ASS от стандартного SSA выделены жирным красным шрифтом.

1. Основные сведения

Переводчик - Ramzes-III

Этот документ содержит перевод оригинальной спецификации описывающей внутреннюю структуру субтитров в формате SSA/ASS. Однако это не дословное изложение спецификации. Некоторые моменты описаны так, как я их понимаю, а также дополнены кое-каким собственным опытом.

При написании перевода я в первую очередь ориентировался на скрипты пригодные для размещения в сети, поэтому описания того, как вставить в скрипт шрифт, изображение, звук или видео даны в сокращенном варианте, так как они существенно “утяжеляют” скрипт.

Оригинальную спецификацию на английском языке, вы можете найти на сайте http://www.eswat.demon.co.uk.

Отдельно хотелось бы поблагодарить моего друга Дмитрия, благодаря которому (пусть и косвенно) появился этот перевод. Ибо он попросил меня написать справочку, как сделать караоке в Medusa, а в результате получилось вот что J

Замечания и претензии по точности, понятности и правильности перевода не принимаются – за неделю тестирования этого перевода на форуме Кейджа никто из тамошних знатоков никаких предложений и замечаний не прислал.

1. Формат скрипта SSA v4.00 отличается от предыдущих форматов SSA
SSA v4.00 обладает возможностью читать скрипты старых форматов, но скрипты формата v4.00 не смогут правильно загрузиться в старых версиях SSA.

Некоторые из изменений формата предназначены для совместимости SSA v4.00 со скриптами более поздних версий. В частности новая строка "Format" можно содержать информацию любой последовательности параметров стиля, однако SSA прочтет только те параметры, которые ему понятны.

2. Скрипт записывается в формате неформатированного (DOS) текстового файла.
Это означает, что вы можете редактировать его “вручную” в любом текстовом редакторе, но будьте внимательны, SSA воспринимает скрипты написанные в соответствии с правилами, изложенными в этом документе. Загрузка в SSA скрипта, отредактированного с ошибками, может привести к потере информации.

3. Скрипт отличается от “ini”-файлов.
Поскольку скрипт, это не ini-файл Windows, их внутреннее устройство серьезно различается!

4. Большинство строк в разделах начинаются со специального слова – “дескриптора”, описывающего их содержимое. Дескриптор оканчивается “двоеточием”.

5. Информационные поля в строках разделяются “запятыми”.

В SSA скрипте значения параметров в строке разделяются “запятыми”, поэтому нельзя использовать “запятые” в именах стиле и прочих текстовых параметрах, за исключением собственно текста субтитров.

6. SSA не обращает внимания на порядок событий (в частности субтитров).

Не важно, в каком порядке события записаны в скрипте. Они все равно будут проигрываться в соответствии с таймингом. Но будьте внимательны, если есть два субтитра с одинаковым начальным таймингом, и вертикальным отступом, то тот субтитр, который идет в скрипте первым будет располагаться ниже, чем тот, который идет следующим.

7. Ошибочная информация игнорируется.
SSA игнорирует неправильно написанные служебные слова и имена параметров. В результате, может быть потеряна информация о форматировании субтитров. Будьте внимательны при редактировании скрипта вручную в текстовом редакторе!

8. Строки не должны быть разорваны.

Все информационные записи содержаться в виде строк со строго определенным набором параметров. Разрыв такой строки на несколько частей недопустим.

9. Если Стиль не определен, то будет использован стиль Default.

Если используемый стиль не описан в соответствующем разделе, то будет использован стиль с именем Default. Если стиль Default также не описан, то последствия непредсказуемы. (мой VobSub при это использует стиль “жирный Arial, кегль 16, все отступы – 20, цвет – белый”)

10.Если шрифт используемый в Стиле не установлен, то будет использоваться шрифт Arial.

Это может случиться при использовании чужих скриптов – набор установленных шрифтов на вашем компьютере и компьютере автора может различаться. При написании скрипта желательно использовать стандартные шрифты. Если используется нестандартный шрифт, его необходимо приложить к скрипту, или вшить в него.

2. Основные термины и понятия

Координатная сетка. Ось X, это воображаемая осевая линия расположенная горизонтально. Ось Y - расположенная вертикально. Ось Z - расположенная перпендикулярно плоскости экрана. Центр координат - левый верхний угол кадра. Координаты измеряются в пикселях (точках).

Координатная точка субтитра. Точка, координаты которой задаются при абсолютном позиционировании и перемещении. При выравнивании по центру эта точка находится в середине строки. При выравнивании по правому или левому краям эта точка находится соответственно на правом или левом крае строки (строк). Тоже самое и в отношении вертикального выравнивания. При выравнивании по нижнему краю, точка выравнивания находится внизу строки (строк). По середине - в середине строки (строк). По верхнему - сверху.

Коллизия – Взаимопересекающиеся тайминги у двух разных (не обязательно соседних) субтитров

3. Разделы скрипта Sub Station Alpha

[Script Info]

Этот раздел содержит заголовок и основную информацию о скрипте.

Строка “[Script Info]” должна быть первой строкой в скрипте формата v4.

[v4 Styles]

Этот раздел содержит описание стилей. Все стили, используемые для показа субтитров, должны быть определены в этом разделе.

Для субтитров формата ASS это будет раздел [v4 Styles+]

[Events]

Этот раздел содержит все события, которые должен отработать скрипт – все субтитры, комментарии, команды на показ изображения и видео, проигрывания звука и выполнения программ. Фактически это основной раздел скрипта. Именно его содержимое отображается в таблице строк субтитров в программах редактирования.

[Fonts]

Этот раздел содержит шрифты, закодированные в текстовом формате. За детальной информацией обращайтесь к оригинальной англоязычной спецификации.

[Graphics]

Это раздел содержит растровые изображения, закодированные в текстовом формате. За детальной информацией обращайтесь к оригинальной англоязычной спецификации.

4. Типы строк в SSA-скрипте

Здесь приводится краткое описание строк встречающихся в SSA-скрипте. За детальным описание обращайтесь в следующие разделы.

!: Комментарий. Используется только в файле. Невиден при загрузке файла в редактор субтитров.

Title: Название скрипта.

Original Script: Автор скрипта.

Original Translation: (optional) Переводчик.

Original Editing: (optional) Редактор.

Original Timing: (optional) Таймеровщик

Synch Point: (optional) Описание кадра, позволяющее синхронизировать скрипт с видео.

Script Updated By: (optional) Редактор, не связанный с автором скрипта.

Update Details: Детальное описание внесенных сторонним редактором изменений.

ScriptType: Версия формата.

Collisions: Обработка коллизий (субтитров со взаимоперекрывающимся таймингом).

PlayResY: Разрешение по вертикали.

PlayResX: Разрешение по горизонтали.

PlayDepth: За более детальной информацией обращайтесь к английской версии спецификации.

Timer: За более детальной информацией обращайтесь к английской версии спецификации.

Style: Описание стиля, определяющего внешний вид субтитров.

Dialogue: Событие “диалог”, то есть текст субтитра.

Comment: Строка комментария. Комментарий игнорируется при показе субтитров, но виден в редакторе субтитров. Может использоваться для временного исключения из показа событий типа “диалог” и т.п.

Picture: Событие “рисунок”, означает, что в этот момент будет отображаться определенное изображение в формате .bmp, .jpg, .gif, .ico или .wmf

Sound: Событие “звук”, означает, что в этот момент будет проигрываться определенный звук из .wav-файла.

Movie: Событие “видео”, означает, что в этот момент будет проигрываться определенный .avi-файла.

Command: Событие “команда”, означает, что в этот момент начнет выполняться определенная программа в режиме фоновой задачи.

5. Заголовок скрипта, раздел [Script Info]

; Комментарии. Текст, следующий за “точкой с запятой”, не отображается ни в каких программах и виден только при просмотре скрипта в текстовом редакторе.

Необязательные строки, не влияющие на работоспособность скрипта

Title: Название скрипта.

Original Script: Автор скрипта.

Original Translation: Переводчик.

Original Editing: Редактор.

Original Timing: Таймировщик.

Synch Point: Описание, ключевого кадра по которому можно понять, как точно скрипт синхронизирован с видео.

Script Updated By: Редактор скрипта. (при более поздней, неавторской редакции)

Update Details: Детальное описание изменений, внесенных в авторский скрипт.

Строки, влияющие на работоспособность и правильность отображения субитров

Script Type: Версия формата, для которого создан скрипт. Для SSA-скриптов – “V4.00”

Для ASS-скриптов - “V4.00+”.

Collisions: Указание на то, как обрабатывать “коллизии”, строки со взаимоперекрывающимся таймингом. Важно, только в том случае, когда у строк одинаковый отступ по вертикали, т.е. строки будут накладываться друг на друга (даже если строки имеют разные стили). Не влияет на строки с разными значениями параметра Layer.

Может принимать значения "Normal" и "Reverse". Чем они отличаются, я так и не понял. За более детальной информацией обращайтесь к английской версии спецификации.

PlayResY: Вертикальное разрешение, на которое настроен скрипт. При наложении скрипта на фильм с другим разрешением DirectShow фильтр автоматически отмасштабирует скрипт.

PlayResX: Горизонтальное разрешение, на которое настроен скрипт. При наложении скрипта на фильм с другим разрешением DirectShow фильтр автоматически отмасштабирует скрипт.

PlayDepth: Глубина цвета (возможно, насыщенность). Понятие не имею, что это такое и на что влияет. За более детальной информацией обращайтесь к английской версии спецификации.

Timer: Масштабирование тайминга в процентах.

“100.0000” соответствует 100%. Должно содержать 4 знака после запятой.

Не знаю, как это работает. За более детальной информацией обращайтесь к английской версии спецификации.

WrapStyle: Определение стиля переноса слов (когда строка не влезает в отведенное для нее место):

0: автоматический перенос, возможен принудительный перенос с помощью тегов \n и \N,

1: перенос по символу “конец строки”, работает только тег \N

2: нет переноса, теги \n и \N игнорируются

3: аналогично 0, но нижняя строка всегда будет длиннее верхней.

6. Определение Стилей, раздел [v4+ Styles]

Стиль определяет внешний вид субтитра (цвет, шрифт, размер букв) и его положение на экране. Все стили используемые в скрипте, должны быть определены в этом разделе.

Большинство (в случае ASS – все) параметры установленные в стиле, могут быть переопределены в конкретном субтитре с помощью управляющих кодов – тегов.

Определению стилей всегда должна предшествовать строка начинающаяся словом “Format:”. Эта строка определяет, в каком порядке будут следовать устанавливаемые параметры. Соблюдайте правильность написания названий параметров (с учетом регистров):

Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding

Строка определения параметров необходима для совместимости последующих версий формата со старым программным обеспечением.

Field 1: Name. Имя стиля. Чувствительно к регистру. Не должно содержать “запятые”.

Field 2: Fontname. Имя шрифта, так как оно определено в Windows. Чувствительно к регистру.

Field 3: Fontsize.

Field 4: PrimaryColour. Основной цвет субтитров в формате BGR (голубой-зеленый-красный). В шестнадцатеричном формате это будет выглядеть как BBGGRR.

Белый – FFFFFF, черный – 000000, голубой – FF0000, зеленый – 00FF00, красный – 0000FF.

Это основной цвет для отображения субтитров.

Field 5: SecondaryColour. Дополнительный цвет субтитров в формате BGR (blue-green-red).

Этот цвет используется при организации спецэффектов, таких как караоке.

Field 6: OutlineColor (TertiaryColour). Цвет окаймления букв в субтитре в формате BGR (blue-green-red).

При установке внешнего вида “Outline+Shadow” - цвет окаймления, при установке “Opaque Box” – цвет поля, но котором размещены субтитры. Для лучшего восприятия рекомендуется делать его контрастным по отношению к Основному цвету.

Field 7: BackColour. Цвет тени под буквами в субтитре в формате BGR (blue-green-red).

Field 4-7: Описание цвета также содержит число определяющее прозрачность букв. В шестнадцатеричном формате это будет выглядеть как AABBGGRR. При этом АА=00 – непрозрачные буквы, AA=FF – абсолютно прозрачные буквы.

Field 8: Bold. Определяет, будет ли текст отображаться жирным шрифтом (-1) или обычным (0). Не исключает применение наклонного шрифта.

Field 9: Italic. Определяет, будет ли текст отображаться наклонным шрифтом (-1) или обычным (0). Не исключает применение жирного шрифта.

Field 9.1: Underline. Подчеркивание. [-1 (есть) или 0(нет)]

Field 9.2: StrikeOut. Зачеркивание. [-1 (есть) или 0(нет)]

Field 9.3: ScaleX. Изменение ширины шрифта [в процентах]. Если без изменений, то 100.

Field 9.4: ScaleY. Изменение высоты шрифта [в процентах]. Если без изменений, то 100.

Внимание: при установке BorderStyle=3 (фон под субтитрами), возможно не пропорциональное изменение ширины или высоты шрифта и фоновой полосы.

Field 9.5: Spacing. Расстояние между буквами. [в пикселях]

Field 9.6: Angle. Угол поворота субтитра вокруг оси Z (ось, перпендикулярная плоскости экрана) против часовой стрелки. Может быть дробным и отрицательным. [в градусах]

Field 10: BorderStyle. 1=Окаймление + тень, 3=фон под субтитрами

Field 11: Outline. Если BorderStyle – 1, то определяет толщину окаймления в пикселях. Если BorderStyle – 2, то определяет размер фонового бокса.

Field 12: Shadow. Определяет глубину размещения тени под субтитрами.

Field 13: Alignment. Число, определяющее горизонтальное и вертикальное выравнивание субтитров. По умолчанию вертикальное выравнивание идет по нижнему краю кадра.

Горизонтальное: 1=по левому краю, 2=по центру, 3=по правому краю.

Для вертикального выравнивания по верхнему краю, добавьте к значению горизонтального выравнивания 4. Для вертикального выравнивания по центру кадра, добавьте к значению горизонтального выравнивания 8.
Например. 5 = выравнивание по верхнему левому углу.

Field 13: В ASS выравнивание определяется так, как расположены кнопки на дополнительной числовой клавиатуре (1-3 по нижнему краю, 4-6 по центру, 7-9 по верхнему краю).

Field 14: MarginL. Отступ от левого края кадра в пикселях. Определяет расстояние от левого края кадра до левой границы области отображения субтитров.

Field 15: MarginR. Отступ от правого края кадра в пикселях. Определяет расстояние от правого края кадра до правой границы области отображения субтитров.

Field 16: MarginV. Вертикальный отступ в пикселях.
Когда выравнивание по нижнему краю – отступ от нижнего края кадра до нижней границы обрасти отображения субтитров.
Когда выравнивание по верхнему краю – отступ от верхнего края кадра до верхней границы.
Когда выравнивание по вертикальному центру – игнорируется, так как субтитр должен располагаться по центру

Field 17: AlphaLevel. Определяет прозрачность текста. В SSA ЕЩЕ не используется.

Field 17: В ASS УЖЕ не используется. J

Field 18: Encoding. Число определяющее кодовую страницу для шрифта. Для поддержки русского языка – 204.

Когда файл в Уникоде, это параметр может быть полезен при преобразовании формата.

7. Событие Dialogue, раздел [Events]

Содержит тайминг, текст субтитров и параметры, определяющие отображение субтитров.

Определению диалогов всегда должна предшествовать строка начинающаяся словом “Format:”. Эта строка определяет, в каком порядке будут следовать устанавливаемые параметры. Соблюдайте правильность написания названий параметров (с учетом регистров):

Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text

Строка определения параметров необходима для совместимости последующих версий формата со старым программным обеспечением.

Field 1: Marked
Marked=1 означает, что в Sub Station Alpha строка будет показана как "отмеченная"

Marked=0 означает, что в Sub Station Alpha строка не будет показана как "отмеченная"

* По всей вероятности, нигде кроме самой SSA этот параметр не используется.

Field 1: Layer

Любое целое число. В случае коллизий, субтитр с большим значением данного параметра будет располагаться поверх субтитра с меньшим значением параметра.

Field 2: Start
Время начала показа субтитра в формате Час:Минуты:Секунды:Сотые_доли_секунды. (Ч:ММ:СС:ДД). Час должен содержать не более одной цифры.

Field 3: End
Время окончания показа субтитра в формате Час:Минуты:Секунды:Сотые_доли_секунды. (Ч:ММ:СС:ДД). Час должен содержать не более одной цифры.

Field 4: Style
Имя стиля определенного в разделе описания стилей.

Field 5: Name
Имя героя. Дополнительная информация не имеющая значащего значения для показа субтитра.

Field 6: MarginL
Отступ от левого края кадра в пикселях для текущего субтитра. Должен содержать четыре цифры. Если имеет значение 0000 – то используется отступ, определенный в стиле.

Field 7: MarginR
Отступ от правого края кадра в пикселях для текущего субтитра. Должен содержать четыре цифры. Если имеет значение 0000 – то используется отступ, определенный в стиле.

Field 8: MarginV
Вертикальный отступ в пикселях для текущего субтитра. Должен содержать четыре цифры. Если имеет значение 0000 – то используется отступ, определенный в стиле.

Field 9: Effect
Эффекты движения. Может содержать информацию для реализации одного из трех встроенных эффектов движения доступных в SSA v4.x

Имена эффектов чувствительны к регистру и должны быть записаны в точности так, как это показано ниже.

Karaoke – означает, что текст субтитра будет высвечиваться последовательно, слово за словом.

Эффект Karaoke устарел и не применяется.

Scroll up;y1;y2;delay[;fadeawayheight] – эффект прокрутки текста вверх по экрану. Параметры отделяются от имени эффекта и друг от друга “точкой с запятой”.

Величины y1 и y2 определяют вертикальные границы области прокрутки. Задаются в пикселях от верхней границы кадра. Последовательность значения не имеет, прокрутка будет осуществляться от большей границы к меньшей.

Параметр delay определяет скорость прокрутки и может находиться в пределах от 0 до 100. Чем больше значение, тем медленнее скорость.

Banner;delay – эффект горизонтального перемещения текста вдоль экрана справа на лево. Текст будет показан в одну строку независимо от длины и кодов переноса строки.

Параметр delay определяет скорость прокрутки и может находиться в пределах от 0 до 100. Чем больше значение, тем медленнее скорость.

Scroll down;y1;y2;delay[;fadeawayheight] - эффект прокрутки текста вниз по экрану. Аналогичен Scroll up.

Banner;delay[;lefttoright;fadeawaywidth] – улучшеный эффект горизонтального перемещения текста вдоль экрана.

Параметр lefttoright может иметь значения 0 или 1. Значение 0 означает перемещение справа на лево и может отсутствовать. Значение 1 означает перемещение слева на право.

Когда параметр delay больше 0, перемещение буде идти со скоростью 1 пиксель за (1000/delay) секунд.

(ВНИМАНИЕ: Avery Lee’s фильтр субтитров воспринимает параметры эффекта “Scroll up” как delay;y1;y2)

Параметы fadeawayheight и fadeawaywidth определяют длину (в пикселях) промежутка, на котором субтитры постепенно появляются и постепенно исчезают.

Field 10: Text
Текст субтитра. Может содержать “запятые”, так как все, что расположено после 9-ой запятой считается текстом субтитра.

Может содержать управляющие коды (см. Приложение А)

8. Событие Comment, раздел [Events]

Эта строка может содержать комментарии видимые в редакторе субтитров и невидимые в плеерах. Заголовок строки – “Comment” - может использоваться для исключения из показа строк с субтитрами.

9. Событие Pictur, раздел [Events]

Содержит те же параметры, что и Dialogue, но в Параметре 10 (Field 10), вместо текста субтитра содержится полный маршрут и имя файла с изображением.

Стили игнорируются. К изображению может быть применен эффект движения "scroll up".

Поля, переопределяющие левое и вертикальное выравнивания определяют (в пикселях) положение нижнего левого угла изображения. Нули в соответствующем параметре указывают, что изображение будет располагаться по центру.

10. Событие Sound, раздел [Events]

Содержит те же параметры, что и Dialogue, но в Параметре 10 (Field 10), вместо текста субтитра содержится полный маршрут и имя звукового файла (.wav).

Стили и выравнивания игнорируются. Время окончания субтитра также игнорируется – звуковой файл будет проигрываться пока не закончится, или пока не начнется проигрывание другого звукового файла.

Если до окончания проигрывания текущего звукового файла, будет дана команда на проигрывание видео файла со звуком, то будет идти звук из того файла, который начал проигрываться последним.

11. Событие Movie, раздел [Events]

Содержит те же параметры, что и Dialogue, но в Параметре 10 (Field 10), вместо текста субтитра содержится полный маршрут и имя файла видео (.avi).

Стили игнорируются. Эффекты движения игнорируются.

Время окончания субтитра указывает, когда прекратить показ видео, но если видео файл длиннее, то звук будет продолжать звучать.

Поля, переопределяющие левое и вертикальное выравнивания определяют (в пикселях) положение ВЕРХНЕГО ЛЕВОГО угла изображения. Нули в соответствующем параметре указывают, что изображение будет располагаться по центру.

Если до окончания проигрывания текущего видео файла, будет дана команда на проигрывание звукового файла, то будет идти звук из того файла, который начал проигрываться последним.

12. Событие Command, раздел [Events]

Содержит те же параметры, что и Dialogue, но в Параметре 10 (Field 10), вместо текста субтитра содержится полный маршрут и имя файла программы

Стили, эффекты движения и выравнивание игнорируются. Время окончания также игнорируется – программы будет работать пока не остановится сама или пока её не остановят вручную.

Есть несколько внутренних SSA команд, которые могут быть использованы в SSA скрипте.

За более детальной информацией обращайтесь к оригинальной английской спецификации.

Приложение A: Коды переопределения стилей

Здесь описано, как и с помощью каких кодов можно переопределить настройки показа субтитра установленные в Стиле.

Все коды должны находится в фигурных скобках { }, за исключением кодов переноса строки \n и \N.

Все коды должны начинаться с обратного слеша \

В фигурных скобках может располагаться любое количество кодов.

Большинство тэгов влияет только на тот текст, который расположен непосредственно за ними.

Некоторые коды влияют на всю строку целиком, не зависимо от того, где они в ней находятся. Это коды выравнивания и коды анимации.

\n код переноса строки. Игнорируется, если в ASS-скрипте установлен режим "smart-wrapping". Не заключается в фигурные скобки!

\N безусловный коды переноса строки. Работает всегда, за исключением режима, когда перенос полностью запрещен. Не заключается в фигурные скобки!

\b<0 or 1> жирный шрифт. \b1 - включение жирного шрифта, \b0 - отключение жирного шрифта.

В ASS значение может быть больше единицы, и это должно на что-то влиять, но не совсем понятно, на что. За более детальной информацией обращайтесь к оригинальной англоязычной версии.

\i<0 or 1> наклонный шрифт. \i1 - включение наклонного шрифта, \i0 - отключение наклонного шрифта.

\u<0 or 1> подчеркивание

\s<0 or 1> зачеркивание

\bord<толщина> изменение толщины окаймления символов. <толщина> - значение толщины окаймления в пикселях.

\shad<глубина> изменение тени. <глубина> - значение глубины расположения тени в пикселях.

\be<0 or 1> размытые края.

\fn<имя шрифта> изменение шрифта. <имя шрифта> - имя шрифта установленного в Windows. Чувствителен к регистру.

Если имя шрифте не определено, будет использован шрифт Arial.

\fs<размер шрифта>

изменение кегля (величины символов) шрифта.

\fsc<x или y><проценты>

масштабирование символов по осям X и Y. <проценты> - масштаб в процентах от номинала (нормального размера).Масштабирование происходит относительно координатной точки субтитра

Внимание: при установке BorderStyle=3 (фон под субтитрами), возможно не пропорциональное изменение ширины или высоты шрифта и фоновой полосы.

\fsp<расстояние> изменения расстояния между соседними символами. <расстояние> - расстояние между соседними символами в пикселях.

\fr[<x/y/z>]<угол>

поворот строки вокруг осей X,Y и Z. <угол> - угол поворота в градусах (может быть и отрицательным). Тег \frz имеет сокращенную форму \fr. Поворот происходит вокруг координатной точки субтитра.

\fe<номер> изменение кодовой страницы. <номер> - номер кодовой страницы (для кирилицы - 204).

\c&H<bbggrr>& изменение цвета. <bbggrr> - шестнадцатиричный код цвета.

\1c&, \2c&, \3c& и \4c& - изменение основного цвета шрифта (синоним \c&), дополнительного цвета шрифта (используется при караоке), цвета окантовки символов и цвета тени соответственно.

\a&H<aa>& изменение альфа-канала (прозрачность символов). <aa> - число в шестнадцатеричном коде от 0 (абсолютная непрозрачность) до 255 (абсолютная прозрачность). \1a&, \2a&, \3a& и \4a& - изменение альфа-канала для основного цвета, дополнительного цвета, окантовки и тени соответственно. \alpha синоним \1a.

\a<выравнивание> изменение выравнивания. <выравнивание> - цифровой код выравнивания

По умолчанию вертикальное выравнивание идет по нижнему краю кадра.

Горизонтальное: 1=по левому краю, 2=по центру, 3=по правому краю.

Для вертикального выравнивания по верхнему краю, добавьте к значению горизонтального выравнивания 4.

Для вертикального выравнивания по центру кадра, добавьте к значению горизонтального выравнивания 8.

0 или отсутствие значения – устанавливает выравнивание по умолчанию (соответствует коду 2)

Действует на всю фразу независимо от местоположения!

\an<выравнивание> выравнивание в соответствии с дополнительной цифровой клавиатурой.

Действует на всю фразу независимо от местоположения!

\k<задержка> Создание Караоке. <задержка> - время ожидания в миллисекундах перед применением следующего тега \k.

\k - мгновенное изменение цвета шрифта с дополнительного на основной с последующей задержкой на <длительность> миллисекунд.

\kf или \K - постепенное изменение цвета шрифта c дополнительного на основной слева на право (<длительность> - время изменения в мс).

\ko - мгновенное изменение цвета окантовки символов с дополнительного на нормальный цвет окантовки с последующей задержкой на <длительность> миллисекунд.

\q<номер> изменение стиля переноса.

\r[<Стиль>] Отмена всех ранее введенных переопределений стиля.

Переход к стилю <Стиль> взамен ранее установленного.

Любой код с нераспознанным параметром будет применен как код с параметрами по умолчанию.

Коды Анимации:

\t([<t1>, <t2>, ] [<скорость>,] <коды>)

Основной код анимации.

<t1>, <t2> - смещение времени начала и окончания анимации относительно начального времени показа субтитра (в миллисекундах), при t2<t1 – изменения происходят мгновенно.

<скорость> - дополнительный показатель влияющий на скорость анимации, 1 - нормальная линейная скорость, равномерная анимация (по умолчанию),

меньше 1 - сначала скорость быстрая, но постепенно замедляется (зависит от величины, чем ближе к 1 тем скорость более равномерна)

больше 1 - наоборот сначала скорость медленная но постепенно увеличивается (зависит от величины, чем ближе к 1 тем скорость более равномерна),.

<коды> - любой код, который может быть анимирован:

\c,\1-4c,\alpha,\1-4a,\fs,\fr,\fscx,\fscy,\fsp,\bord,\shad,\clip (только обычный \clip)

\move(<x1>, <y1>, <x2>, <y2>[, <t1>, <t2>])

Произвольное перемещение субтитра по кадру.

<x1>, <y1> координата начальной точки (в пикселях).

<x2>, <y2> координаты конечной точки (в пикселях).

<t1>, <t2> смещение времени начала и окончания анимации относительно начального времени показа субтитра (в миллисекундах)

Координаты определяют положение координатной точки.

\pos(<x>, <y>) абсолютное позиционирование субтитра в точке с координатами <x>, <y> (в пикселях).

Координаты определяют положение координатной точки.

\org(<x>, <y>) принудительное задание положения координатной точки субтитра (в пикселях).

ВНИМАНИЕ: \t, \move и \pos игнорируют коллизии.

\fade(<a1>, <a2>, <a3>, <t1>, <t2>, <t3>, <t4>)

плавное появление и исчезновение субтитра (полный вариант).

<a1> прозрачность до момента времени <t1>

<a2> прозрачность в промежутке времени между <t2> и <t3>

<a3> прозрачность после момента времени <t4>

<t1>-<t4> Смещение временных точек относительно времени начала субтитра в миллисекундах.

<t1> - <t2> прозрачность линейно изменяется от <a1> до <a2>

<t2> - <t3> прозрачность постоянна и определена значением <a2>

<t3> - <t4> прозрачность линейно изменяется от <a2> до <a3>

\fad(<t1>, <t2>) плавное появление и исчезновение субтитра (сокращенный вариант).

<t1> - время проявления субтитра (величина отрезка времени, за который субтитр полностью проявится) (в миллисекундах)

<t2> - время исчезновения субтитра (величина отрезка времени, за который субтитр полностью исчезнет) в мс.

\clip(<x1>, <y1>, <x2>, <y2>)

обрезает части строки субтитра (текст или рисунок – без разницы), выходящие за границы прямоугольной области определенной координатами.

\clip([<масштаб>,] <команды рисования>)

обрезает вокруг замкнутого контура, определенного командами рисования.

<масштаб> означает тоже, что и а случае с \p<масштаб>

Коды Рисования:

ВНИМАНИЕ: VobSub версии 2.23 и ниже, а также, возможно, и некоторые более старшие версии рисунки не отображают, хотя место под них отводят. Рекомендую устанавливать более позднюю версию VobSub.

\p<масштаб>

Включает режим рисования и устанавливает масштаб увеличения координатной сетки как 2 в степени (<масштаб>-1). То есть при <масштаб>=1 координаты будут отсчитываться один к одному, при <масштаб>=3 величина координатной сетки увеличивается в 4 раза, и так далее. Под координатной сеткой подразумевается не абсолютная координатная сетка (как в случае с кодом \pos), а относительная, используемая только в рисунке. При этом рисунок подвержен большинству кодов переопределения стиля, таких как \bord, \shad, \с, \a и др. Текст идущий после закрывающей фигурной скобки интерпретируется как команды рисования.

Если <масштаб>=0 режим рисования отключается и следующий за кодом текст интерпретируется как обычный текст субтитра.

\pbo<y> <y> - смещение базовой линии. По умолчанию, весь рисунок располагается на базовой линии субтитра (линии проходящей по нижней границе строки) так, что самая нижняя точка(точки) рисунка расположена на этой линии . С помощью этой команды можно переместить базовую линию вверх или вниз на <y> пикселов. (вверх: y<0, вниз: y>0)

Команды рисования:

m <x> <y> Переместить курсор в точку с координатами <x>, <y> (предыдущий контур будет автоматически замкнут.

n <x> <y> Переместить курсор в точку с координатами <x>, <y> (не замыкая предыдущий контур)

l <x> <y> провести линию из текущей точки в точку с координатами <x>, <y>

b <x1> <y1> <x2> <y2> <x3> <y3>

Провести кривую Безье, используя точки 1 и 2 как начало и окончание, а точку 3, как точку направления и величины изгиба.

s <x1> <y1> <x2> <y2> <x3> <y3> .. <xN> <yN>

Провести сплайн-кривую через N точек. Команда должна содержать не менее 3-х точек.

p <x> <y> продлить сплайн из текущей точки в точку с координатами <x>, <y>

c замкнуть сплайн

Важно:

Команды должны располагаться между кодами {\p<x>} и {\p0}. (за исключением кода \clip(..))

Рисунок должен начинаться с команды m.

Рисунок должен содержать только замкнутые контуры.

Все разомкнутые контуры будут автоматически замкнуты прямыми линиями.

Замкнутые контуры заливаются основным цветом. Сама линия показывается цветом окаймления и имеет толщину, как у окаймления букв. Можно сделать контурный рисунок, для этого необходимо сделать основной цвет прозрачным с помощью соответствующих кодов или в установках стиля.

Взаимоперекрывающиеся контуры объединяются с помощью операции XOR (исключающее или).

Если одноименные команды следуют друг за другом, их имена писать не обязательно.

Все команды и координаты отделяются друг от друга пробелами.

Команды “p” и “c” должны следовать только за другими командами рисования сплайна, хотя их применение после обычных команд не приводит к фатальным последствиям.

С точки зрения VobSub рисунок – это просто слово в строке субтитра, поэтому рисунок может располагаться между слов и подвержен действию многих кодов переопределения стиля.

Примеры:

квадрат: m 0 0 l 100 0 100 100 0 100

скругленный квадрат: m 0 0 s 100 0 100 100 0 100 c (в этом случае “c” соответствует команде “p 0 0 100 0 100 100”)

Круг: m 50 0 b 100 0 100 100 50 100 b 0 100 0 0 50 0 (замечание – вторая ‘b’ необязательна)

Приложение B: правила кодирования шрифтов/изображений

За детальной информацией обращайтесь к оригинальной английской версии спецификации.


Наложение субтитров и логотипов на видеоизображения с помощью программы VirtualDub

(для трансляции видеороликов на плазменных панелях с помощью Dune HD Network и др.)

В данной статье описано, как наложить субтитры и логотипы на видеоизображение при помощи программы VirtualDub.

Для начала нужно сделать несколько отступлений от темы данной статьи, чтобы всем стало понятно, о чем вообще пойдет речь.

Многие, кто занимался или занимается видеомонтажом, наверное, слышал о программе VirtualDub. Несмотря на свои относительно скромные размеры, VirtualDub является качественным и бесплатным видео редактором с удобным пользовательским интерфейсом. Для работы с этой программой вовсе не обязательно быть профессионалом. Достаточно запомнить минимальный набор функций и пользоваться ими. А при знании основ работы с видео, освоить все тонкости обработки и захвата видеоизображений с этой программой не составит труда.

Основные возможности VirtualDub:

  • конвертирование видео из одного формата в другой,
  • захват видео, отдельная обработка видео и звукового потока,
  • разделение AVI файлов на части,
  • соединение AVI файлов,
  • вырезание из AVI звука,
  • изменение задержки звука,
  • уменьшение размеров видео файлов (качество, естественно, теряется) и т.д.

VirtualDub поддерживает обработку файлов размером более 2 Gb, имеет встроенный Motion-JPEG, MPEG-1 декодер, конвертирует MPEG-1 в 24-bit AVI и имеет много других полезных функций. Так, с подключенным плагином VirtualDub умеет работать с .vob-файламами (DVD-фильмы) и форматом MPEG2, а при подключении соответствующих плагинов также поддерживаются и файлы форматов .3gp, .mp4, .mov, .asf, .wma, wmv, .pvn, .flv, .fli, .flc и многие другие.

Особое значение при работе с видео имеют различные фильтры, написанные специально для VirtualDub, которые относительно просты в использовании (установка, настройка, тестирование). Причём эти фильтры могут быть написаны всеми, кто умеет программировать. Именно поэтому даже более наглядные и профессиональные видеоредакторы, такие как Pinnacle Studio и Adobe Premiere, в чём-то уступают VirtualDubу! (Более полную и продробную информацию о работе с VirtualDub приведена на PcTuner.ru и на 3Dnews.ru, а также в оффлайн на PcTuner.ru и на 3Dnews.ru.)

Также существует множество других аналогичных и даже более совершенных программ, созданных на основе VirtualDub, например, VirtualDubMod (скачан сайта Sourceforge.net) или VirtualDub MPEG. Также на основе VirtualDub возможна работа утилиты AVISynth (см. Основы использования утилиты AVISynth при обработке видео и Руководство по утилите AVISynth). Многие могут осудить, что по сравнению с ними сам VirtualDub «давно и безнадёжно» устарел. Но, по моему мнению, научившись работать в основной программе, каждый сможет поэкспериментировать для себя все дополнительные возможности новейших «клонов» VirtualDubа.

Теперь перейдем к теме данной статьи. Для образного представления всех необходимых действий ниже приведён следующий алгоритм:

  1. Подготовка ОС для работы с видео: установка кодеков, проигрывателей, видео конверторов и программы VirtualDub с необходимыми фильтрами;
  2. Подготовка исходных видеороликов для обработки в VirtualDub;
  3. Работа с VirtualDub: начальные установки и редактирование видеоролика без применения фильтров;
  4. Работа с VirtualDub: настройка и применение фильтра resize;
  5. Работа с VirtualDub: настройка и применение фильтра logo;
  6. Работа с VirtualDub: настройка и применение фильтра subtitler;
  7. Работа с VirtualDub: сохранение полученного видеоролика в формат avi;
  8. Преобразование формата avi в vob с помощью конверторов.

1. Для работы с видео на компьютере должны быть установлены нормальные кодеки (кодеры и декодеры), программы для воспроизведения (плееры), преобразования (конверторы) и редактирования (редакторы) аудио и видео. Для воспроизведения и преобразования мультимедиа наиболее качественными являются кодеки из пакета K-Lite Mega Codec Pack (начиная с версии 1.5). При установке данного пакета кодеков рекомендуется установить все кодеки кроме DivX (для воспроизведения DivX-файлов лучше использовать libavcodec от FF Show).

В K-Lite Mega Codec Pack входят проигрыватели Media Player Classic и BS Player, которые намного лучше, качественнее и быстрее работают с множеством форматов аудио и видео, отображают субтитры, позволяют просмотреть свойства аудио и видео, чем стандартный Windows Media Player – очередная недоделка microsoft :-). Если кодеки установлены нормально, то видео среднего качества (640x480, 768x576), воспроизводимое через Media Player Classic, практически не тормозит даже на медленных компьютерах.

Также в качестве видеопроигрывателя можно использовать простой, удобный и бесплатный плеер Light Alloy (версия 4.0 и более), который отлично проигрывает ещё и музыку. Для воспроизведения звука наиболее удобными и многофункциональными являются плееры WinAmp и Aimp.

Видеоконверторов, видеограбберов, видеорипперов и пр. аналогичных программ можно найти очень много. Все они нужны для преобразования видео/аудио информации из одного формата в другой, чтобы исходное видео/аудио можно было просмотреть/прослушать на другом устройстве (DVD-проигрывателе, MP3-плеере, мобильном телефоне) или чтобы его можно было открыть/изменить в любом другом приложении (видеоредакторе, специализированном ПО). При решении этих задач выбрать какой-нибудь универсальный и общий для всех случаев конвертор невозможно. Учитывая многообразие форматов и необходимых требований, предъявляемых к выходному видео/аудио, при выборе подходящих видеоконверторов следует обратить внимание на возможность сохранения/изменения:

  • типа кодеков или формата видео/аудио;
  • разрешения;
  • битрейта (количества данных в секунду) видео и аудио;
  • частоты кадров в секунду;
  • частоты дискретизации;
  • прочих возможностей, удобств и особенностей (язык интерфейса, наличие лицензии и требование регистрации).

Наиболее удачными и проверенными видеоконверторами, на мой взгляд, являются Total Video Converter, Ani Video Converter, Amadis Video Converter Suite, My Video Converter, ImTOO HD Video Converter.

Учитывая огромное разнообразие видеоредакторов, профессиональных и простых, удобных и многофункциональных, на компьютере могут быть установлены десятки различных приложений для захвата, обработки и монтажа видео. Но в данном случае в качестве видеоредактора будем использовать русскую версию VirtualDub v1.8.6.30009 (В этой версии содержится фильтр logo, который понадобится для наложения логотипа!). Также на ваше усмотрение можно предложить более новые английские версии VirtualDub v1.9.6 и VirtualDub 1.9.8, которые есть на сайтах Sourceforge.net и Softodrom.ru.

2. После правильной установки и настройки ПО можно приступать к работе с видео.

Данный VirtualDub понимает не все форматы, и иногда при открытии конкретного файла определенного типа (часто mp4, mov, flv, иногда vob, mpg и avi) видеоизображение либо отображается с искажениями, либо не отображается (черный экран). Поэтому исходное видео приходится предварительно преобразовывать в avi формат с использованием кодека DivX 5.0 и выше. Также этот VirtualDub часто «ругается» на переменный битрейт исходного видео, хотя файл открывается (см. Рисунок 1).

Рисунок 1

Все операции по предварительному преобразованию я проводил через My Video Converter (см. Рисунок 2).

Рисунок 2

3. Когда исходное видео подготовлено (видеофайл нормально открывается в Virtual Dub) можно приступить к непосредственному редактированию. Ответы на вопросы «Как работать в VirtualDub?» подробно описаны на сайтах 3Dnews.ru и PcTuner.ru и в оффлайн на 3Dnews.ru и на PcTuner.ru, да и в инете есть много всякой инфы про него. Поэтому перейдем сразу к делу. Для начала нужно установить оптимальные параметры, которые влияют на сохранение выходных видеофайлов.

Если мы работаем над видеороликом, который будет транслироваться на плазменной панели, то звуковая дорожка не нужна. В меню Аудио ставим маркер возле пункта "Без аудио" (см. Рисунок 3).

Рисунок 3

По умолчанию при запуске VirtualDub компрессия видеоизображения не используется (в меню Видео–>Компрессия... (см. Рисунок 4) выставлено значение "(Uncompressed RGB/YCrCb)"), а если сохранить выходное видео среднего качества, то пара минут видео займёт на жёстком диске несколько Гигабайт! С этим надо поосторожнее...

Рисунок 4

Поэтому для сжатия выходного видео нужно выбрать какой-нибудь кодек из тех, которые приведены на Рисунке 5. Наиболее эффективным, оптимальным и качественным является DivX (это проверено многочисленными опытами, тестами, экспериментами).

Рисунок 5

В настройках кодека устанавливаем следующие параметры (см. Рисунок 6):

Рисунок 6

Версия кодеков может отличаться, поэтому, главное, чтобы видео сохранялось с наименьшими потерями, с наилучшим качеством (quality), с максимальным битрейтом 6000 kbps. Для простоты вывода видео установлен один проход (Rate control mode: 1-pass), хотя Virual Dub позволяет сохранять видео в несколько проходов (см. 3Dnews.ru в интернете и в оффлайне). Значительной разницы в уменьшении размера файла и изменении качества исходного видео при многопроходной и однопроходной компрессиях я не заметил. Поэтому проще использовать однопроходное сжатие.

Также для оптимизации и удобства работы с программой рекомендуется в меню Вид выключить опцию «Отображать входное видео» и включить опцию «Поменять исходную/выходную панель» (см. Рисунок 7):

Рисунок 7

После предварительных установок можно перейти к работе с видео. Открываем исходный видеофайл. Обрезаем начальные и конечные кадры с заставками «konopoisk.ru», «русская версия» и зелёным экраном, оставляя только сам видеоролик.

4. Далее переходим к самому интересному – работе в Virtual Dub с применением фильтров.

Поскольку исходные ролики могут иметь нестандартное или неподдерживаемое разрешение, то довольно часто приходится менять его на стандартное поддерживаемое разрешение для устройств Dune HD Network и др. – 720x576. Наиболее эффективно использовать уменьшение размера кадров, например, если исходный ролик в HDTV формате.

Для этого в Virtual Dub используется стандартный фильтр resize (зайти в меню Видео–>Фильтры...–>Добавить... и выбрать в списке resize). Далее в появившемся окне нужно задать параметры для данного фильтра, также как на Рисунке 8:

Рисунок 8

В настройках фильтра блок «Размеры» изменяет исходное изображение в кадре, и при этом могут происходить искажения по ширине и высоте, а блок «Кадры» изменяет положение этого изображения в кадре относительно его границ, а лишние края изображения могут отсекаться. Блок «Размер по кодеку» задает разрешение по горизонтали и вертикали кратное 4, 8 и 16 пикселям, чтобы видео воспроизводилось данным кодеком без искажений.

Данный фильтр должен быть настроен таким образом, чтобы исходное изображение не искажалось и полностью вмещалось в кадр: в блоке «Размеры» новый размер задается точно в количестве пикселов – 720 по ширине (значение по высоте вычисляется автоматически), соотношение сторон – как в источнике, режим фильтра – Precise bicubic (A=-1.00) [для широкоэкранного формата 16:9 рекомендуется установить Precise bicubic (A=-0.75), хотя значительной разницы нет], без чередования в блоке «Кадры» нужно установить «Заполнение до соотношения сторон» 4:3, цвет заполнения – чёрный, в блоке «Размер по кодеку» установить «Без подстройки» (см. Рисунок 8).

По поводу настроек данного фильтра нужно сделать важное замечание: в частных случаях все настройки могут отличаться от представленных на Рисунке 8! Например, если изображение на исходных видеороликах искажено (вытянуто или сплющено)(при изменении соотношении сторон 16:9->4:3), то при изменении размера кадра можно попытаться восстановить изображение, настраивая при этом фильтр resize наиболее подходящим образом.

Также данный фильтр позволяет сохранить настройки и просмотреть изображение на выходе (см. Рисунок 9):

Рисунок 9

5. Логотип можно наложить на исходное изображение с помощью фильтра logo, который входит в комплект с русской версией VirtualDub v1.8.6.30009. Настройки фильтра предельно просты: открываем рисунок в формате bmp, tga, jpg, png, включаем попиксельное альфа смешивание через альфа канал и указываем координаты рисунка. Логотип «Синема Парк» удобно размещать наверху по центру.

Самое сложное в этом фильтре – это нарисовать необходимый рисунок :-). Поэтому пришлось с помощью GIMPa заранее нарисовать этот логотип под заданное разрешение видеоролика – 720x540 (для плазменных панелей) и 320x240 (для рекламного экрана).

Также стоит отметить, что рисунок должен содержать прозрачные области (альфа канал), а данный фильтр хорошо понимает только формат tga.

Ниже на Рисунках 10 и 11 приведены настройки фильтра и полученный результат:

Рисунок 10

Рисунок 11

6. Чтобы в нижней части видеоизображения были надписи с названием фильма/видеоролика можно воспользоваться фильтром subtitler, который работает с ssa-скриптом (Sub Station Alpha v2.x/4.x). Фильтр Subtitler v2.4 можно скачать с неофициального сайта по VirtualDub VirtualDub.kulichki.ru и установить его в папку \VirtualDub\plugins (обычно это C:\Program Files\VirtualDub\plugins). Русский вариант спецификации скрипта SSA (SubStation Alpha) приводится на сайте Subs.com.ru (Subtitles Catalogue) или здесь в оффлайн. Самое удивительное в этом фильтре то, что его не нужно настраивать: правильное отображение надписей, их положение, цвет, фон, начертание, время отображения и пр. параметры задаются в самом скрипте! Пользуясь приведенной спецификацией, я написал два ssa-файла субтитров: отдельно для видеороликов на плазменные панели и отдельно для видеороликов на экран на улице. Написание сриптовых файлов не требует особых усилий, поэтому, я думаю, и разобраться в них будет не сложно. Ниже привожу тестовый ssa-файл и упрощённый текст ssa-файла для наложения субтитров (красным выделены основные параметры, которыми можно задавать правильное отображение субтитров):

[Script Info]
; скрипт субтитров к видеороликам
Title: Субтитры для плазм
ScriptType: v4.00
Collisions: Normal
PlayResX: 720
PlayResY: 540
PlayDepth: 24
Timer: 100,0000

[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Comic Sans MS,65,&HFFFFFF&,&HFFFFFF&,&H3B4144&,&H3B4144&,-1,0,1,1,0,2,3,3,3,0,204

[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: Marked=0,0:00:00.00,0:10:00.00,Default,,0000,0000,0000,,Название фильма
Dialogue: Marked=0,0:00:00.00,0:00:00.00,Default,,0000,0000,0000,,

Параметры PlayResX: 720 и PlayResY: 540 задают горизонтальное и вертикальное разрешение видеоролика, на которое настроен скрипт. Для плазменных панелей разрешение обычно равно 720x540.

Параметр 65 указывает на размер шрифта. Для плазменных панелей оптимальным является размер 65 пунктов для названий фильмов, вмещающихся на одну строку, и 62 пункта для длинных названий фильмов, которые приходиться размещать в две строки.

Параметр 0:10:00.00 устанавливает конечный момент времени отображения названия фильма. По умолчанию время выставлено на 10 минут. Но все зависит от длины видеоролика и если длительность его превышает это значение или субтитры должны как-то динамически меняться, то этот параметр следует изменить.

Параметр 0000 (третий слева) указывает на отступ снизу, иногда используется для того, чтобы приподнять текст субтитров. Более подробно про отступы написано в спецификации.

Параметр Название фильма задаёт текст, который будет отображаться, т.е. название фильма. В большинстве случаев приходиться менять только этот параметр, а все остальные особо важного значения не имеют.

Также есть второстепенные параметры: начертание шрифта (Comic Sans MS), цвета надписей (&HFFFFFF&,&HFFFFFF&,&H3B4144&,&H3B4144&), а также отступы и выравнивание относительно границ видеоизображения, которые подробно описаны в спецификации.

Все изменения в данные скрипты можно внести при помощи обычного Блокнота. После того как ssa-скрипт исправлен и сохранён, нужно в VirtualDub через фильтр Subtitler указать путь к файлу скрипта. Все остальные параметры фильтра менять не нужно. По умолчанию: установить Enable advanced rasterizer (Разрешить расширенную расторизацию) для отображения оттенков и теней для надписей и {\q0} Smart word wrapping – Automatic, with lines evenly broken (Умный перенос слов – Автоматический с равномерным разделением) для выбора способа переноса слов по умолчанию.

Ниже на Рисунках 12 и 13 приведены настройки фильтра и полученный результат:

Рисунок 12

Рисунок 13

7. После того как все фильтры добавлены и настроены они отображаются в списке фильтров, представленном на Рисунке 14:

Рисунок 14

Фильтры можно включать и выключать. Но при этом очень важно соблюдать порядок действия фильтров.

Далее остается только "Сохранить файл как AVI...", указать директорию и имя выходного файла и запустить процесс преобразования (см. Рисунок 15)! Так следует поступать, если видео сохраняется в один проход!!!

Рисунок 15

Если использовать несколько проходов, то в окне сохранения файла необходимо установить галочку Don’t run this job now; add it to job control so I can run it in batch mode. (Не выполнять это задание сейчас; добавить его в управление заданиями так чтобы я мог управлять им в пакетном режиме), поменять номер прохода в настройках кодека и запустить Управление заданиями. Более подробное описание многопроходного сохранения см. на сайте 3Dnews.ru в интернете и в оффлайне.

8. Итак, видеоролик готов. Но для полной совместимости с сетевыми медиапроигрывателями (Dune HD Network и др.) необходимо преобразовать полученные avi-файлы в vob. Все эти преобразования также легко проводить через My Video Converter (см. Рисунок 16):

Рисунок 16

В итоге, не прилагая особых усилий, нам удалось наложить логотип и название фильма к видеоролику, совершив всего лишь 2-3 преобразования изображения, исключив ненужную звуковую дорожку и ненужные фрагменты видео и при этом, не затратив много времени. Очень удобно, когда видеороликов много, так как полная настройка фильтров выполняется только один раз при запуске VirtualDub. Это и позволяет сэкономить время.

При написании данной статьи были использованы следующие материалы с сайтов:

  • PcTuner.ru – сайт про компьютерные тюнеры и мультимедиа, а также про VirtualDub и захват видео;
  • 3Dnews.ru – подробная статья про VirtualDub;
  • VirtualDub.kulichki.ru – неофициальный сайт, посвященный программе VirtualDub; здесь можно скачать Subtitler v2.4 – фильтр для наложения субтитров;
  • Softodrom.ru – здесь можно скачать инсталлятор VirtualDub v1.9.6 (последняя версия VirtualDub 1.9.8!!!), а также инсталлятор русской версии VirtualDub v1.8.6.30009 (данная версия программы использована при написании статьи и в этой версии есть встроенный фильтр logo для наложения логотипов на видеоизображение);
  • Sourceforge.net – здесь тоже можно скачать инсталлятор VirtualDub v1.9.6 (последняя версия VirtualDub 1.9.8!!!) и ещё инсталлятор VitualDubMod v1.5.10.2 build 2542;
  • Subs.com.ru (Subtitles Catalogue) – спецификации формата скриптов SSA/ASS (SubStation Alpha) и русский вариант спецификации.

    • Дополнительные материалы:
  • Fansubs.ru – руководство по утилите AVISynth;
  • Soft.Crownet.ru – статья об основах использования утилиты AVISynth при обработке видео.


VirtualDub

Автор: Евгений Сучев

Материал взят с сайта 3DNews - Daily Digital Digest - VirtualDub

Оглавление:
  • Меню File
  • Продолжение
  • Меню Edit
  • Меню Video
  • Меню Audio
  • Меню Options
  • Панель навигации

    • Пожалуй, все кто занимается или пытался заниматься видеомонтажом, сталкивался с программой VirtualDub. Преимущества VirtualDub над другими программами очевидны - программа бесплатна, проста в освоении (при знании основ работы с видео), постоянно совершенствуется и обновляется и что самое полезное - для неё написано много фильтров обработки видео.

    Естественно, с такими монстрами, как Adobe Premier или Ulead Media Studio ей тягаться просто невозможно, но несложные операции над видеоматериалом VirtualDub делает на ура. Более того, VirtualDub умеет выполнять те операции, которые не под силу этим монстрам. Например, очистка видео от специфических помех. Всё дело в том, что фильтры для VirtualDub могут писать все, кто имеет навыки программирования, что очень сильно развязывает руки при обработке видео.

    Я решил написать статью, которая поможет освоить программу VirtualDub в полной мере. В этой статье будет содержаться описание работы с VirtualDub и в конце приведены маленькие примеры работы с ней. Вот как выглядит стандартный VirtualDub:

    Вы спросите, что значит - "стандартный VirtualDub"? Дело в том, что эту программу написал (и продолжает писать) Avery Lee, но на основе VirtualDub уже написано несколько клонов - VirtualDubMod, VirtualDub Mpeg2. Не надо понимать, что клон это что-то плохое, наоборот, за основу был взят VirtualDub и добавлены некоторые дополнительные возможности.

    В двух словах расскажу о том, как работает VirtualDub внутри. Это поможет вам понять логику некоторых операций и станет более понятно то, что я написал. При открытии какого-либо видео, VirtualDub открывает его при помощи декодеров, установленных в системе. Это касается только AVI формата. VirtualDub умеет так же открывать и MPEG1 видео, но только открывать (причём внутренним декодером).

    Для того, что бы сохранить это видео, вам нужно будет его сжать в какой-либо кодеком, который можно сохранить в AVI формате. Если я веду разговор о декодерах, то это означает, что при открытии видео, VirtualDub воспользовался каким-то системным (или внутренним) декодером для открытия видео (и звука). Если же, разговор зашёл о кодеках (или кодерах), это значит, что он используется для сжатия видео, которое выдал VirtualDub и сохранения в AVI файле.

    Итак, посмотрим, что у нас есть в программе VirtualDub. Сверху находится панель меню, снизу находится панель навигации по видеоряду.

    Меню File

    Первый раздел в панели меню - "File". Как можно понять из названия раздела, здесь находятся функции, отвечающие за работу с файлами (будь то профайлы или файлы видео).

    Здесь сгруппированы все команды VirtualDub, которые открывают или создают различные файлы. Начнём их обзор сверху.

    "Open video file" - открывает файл с вашим видео.

    Изначально, VirtualDub может открыть множество видео форматов, перечислять их нет большого смысла. Если вы не смогли открыть какой-то формат, то можете попробовать VirtualDubMod, в него заложена поддержка большего количества форматов.

    Если же у вас видео состоит из множества кусков (или вы составляете видеоряд из множества картинок), то вы можете автоматизировать их открытие. Для этого, в окне открытия файлов нужно поставить галочку "Automatically load linked segments" (внизу окна). Далее, у всех кусков видео, должны быть одинаковые имена и отличаться только окончанием - номером куска. Например: Video_1, Video_2, Video_3… При этом, все файлы, которые попадут под этот шаблон будут открыты в соответствии с номером в конце файла. Откроются, правда, однотипные файлы (BMP только с BMP, AVI только с AVI…). Галочка "Ask for extended options after this dialog" отвечает за дополнительное меню при открытии файлов. При выставлении этой галочки, после открытия видео появится следующее меню:

    Поясню, что значат пункты этого меню.

    "Re-derive keyframe flags" - восстановление ключевых кадров. Зачем это надо? При передаче файлов по Интернету (или чтении AVI файла с повреждённого диска или…), периодически возникает ситуация, когда повреждаются заголовки AVI. При этом, вся информация о ключевых кадрах теряется и полноценная навигация по фильму будет невозможна. Но внутри видео потока эти кадры никуда не делись и их можно восстановить. Эта команда этим и занимается.

    "Open in AVIFile compatibility mode" - если исходить из названия функции, то при открытии файла, VirtualDub должен переходить в режим работы с AVI файлом. Реально же, не зависимо от расширения файла, VirtualDub распознаёт что там внутри и соответственно открывает.

    "Force video format FOURCC code to" - включает обработку открываемого видео при помощи кодека, указанного в окошке FOURCC метки. FourCC метка - это четырёх знаковый индекс. В AVI файле их ставится 2 штуки: один обозначает кодек, при помощи которого был сжат данный видео файл, а второй обозначает кодек, при помощи которого нужно просматривать данное видео. При открытии видео файла AVI, проигрыватель смотрит на FourCC метку и ищет соответствующий кодек в системе. Так вот, при открытии видео в VirtualDub можно подменить эту метку и в программе видео откроется при помощи указанного кодека. В жизни это на вряд ли пригодится, разве что для Mpeg4 совместимых кодеков. Полный список FourCC меток можно посмотреть здесь.

    "Force video codec handler FOURCC code to" - как я уже сказал, в AVI файле есть 2 FourCC метки. При открытии AVI в VirtualDub, он смотрит на метку кодека, при помощи которого было сжато и открывает соответствующим кодеком. Проигрыватели же смотрят на метку, при помощи которой нужно воспроизводить видео. Если в поле "Force video codec handler FOURCC code to" поставить какую-либо метку, то на работу VirtualDub это никак не отразится. А вот если сделать после этого сохранение видео в режиме "Direct stream copy", то FourCC метка кодека (при помощи которого нужно воспроизводить видео) будет заменена на ту, которую вы укажете.

    По большому счёту, работа с FourCC метками достаточно бесполезные функции. Уже давно вышли отдельные программы, которые позволяют не производя копирования видео заменять обе FourCC метки.

    "Force audio sampling rate to" - эта функция изменяет частоту дискретизации звуковой дорожки. Не знаю, для чего может пригодиться эта функция. Ведь при изменении частоты дискретизации изменяется и продолжительность звука. Разве что, это позволяет устранить ошибки, которые были допущены ранее при записи звука.

    "Disable optimized streaming I/O (saves memory)" - вот с этой функцией есть определённые "непонятки". Описания её нет. В моём понимании, она отключает оптимизацию работы с потоками, что поможет экономить память, но замедляет работу.

    "Use VirtualDub routines for MJPEG (disables any hardware decompression)" - эта функция включает внутреннюю обработку VirtualDub-ом формата сжатия MJPEG, при этом не будут работать аппаратные декодеры, которые установлены на компьютере. Иногда это избавляет от определённых сбоев. Но основная прелесть этой функции в том, что она даёт нам возможность работать с полями.

    После активизации этой функции, можно будет произвести с ними следующие операции:

    "Normal" - не производятся никакие действия с полями.

    "Split interlaced frames into two fields (unswapped) and double framerate" - производит разложение кадров на поля. При этом, производится увеличение частоты кадров в 2 раза и снижение высоты кадра в 2 раза. Порядок полей при этом разложении - верхнее поле первое (TFF). Если видео открытое при помощи этой опции будет смотреться не правильно (кадры будут прыгать то назад, то вперёд), значит ваше видео с нижним полем первым (BFF) и открывать его нужно при помощи следующей опции.

    "Split interlaced frames into two fields (swapped) and double framerate" - это то же самое, что и предыдущая функция, но порядок открытия полей - нижнее поле первое (BFF).

    "Discard first field" - при разложении на поля, откидывает первое (верхнее) поле. При этом производится уменьшение высоты кадра в 2 раза.

    "Discard second field" - при разложении на поля, откидывает второе (нижнее) поле. При этом производится уменьшение высоты кадра в 2 раза.

    "Swap field" - меняет порядок полей в кадре. Эта опция пригодится для видео, которое было сжато со сбоями во время работы MJPEG кодека. Вернёмся же к первому разделу в панели меню.

    После "Open video file" идёт функция "Append AVI segment". Здесь можно произвести присоединение какого-либо видео к вашему. При присоединении учтите, что видео должно иметь те же параметры, что и уже открытое. То есть, у открываемого видео должны быть те же размеры и частота кадров. В звуке так же не должно быть различий (частота дискретизации, число уровней квантования). При открытии дополнительных видео файлов, можно поставить галочку "Autodetect additional segments by filename", которая автоматически определит дополнительные сегменты видео.

    "Preview input" - эта функция включает просмотр видео, которое открыто в VirtualDub.

    "Preview filtered" - эта функция включает просмотр видео, после прохождения обработки во всех фильтрах.

    "Preview output from start" - эта функция включает просмотр видео потока на выходе VirtualDub. Если включить VirtualDub в режим "Direct stream copy", то VirtualDub покажет поток видео, который находится внутри открытого AVI файла.

    "Save as AVI" - тут задаётся имя файла, в который будет производиться запись. Здесь есть единственная галочка ("Don`t run this job now; add it to job control so I can run it in batch mode"), которая позволит вместо моментальной записи, произвести отложенную запись. Подробнее, что это такое. Объясню чуть ниже.

    "Save as old format AVI" - при сохранении видео в этом формате, в AVI файле ставится заголовок старого типа (1.0). Для файлов этого типа есть ограничения в 2 Гигабайта. Использование этого типа AVI файла на данный момент не имеет какого-то смысла и она была сделана для старых программ, которые не понимают AVI формата 2.0.

    "Save segmented AVI" - эта функция позволяет при сохранении видео делить его на куски.

    Допустим, вы пользуетесь файловой системой FAT16, для неё есть ограничение на максимальный размер файла - 2 гигабайта. Так же вам может потребоваться разделить видео на куски по 25 кадров, при помощи этой функции это возможно. А конкретнее: "Don`t run this job now; add it to job control so I can run it in batch mode" - как уже писалось выше, эта функция заносит запись в список отложенных заданий, которые можно будет запустить позже.

    "Limit number of video frames per segment:" - если поставить галочку в этом поле и указать количество кадров, то выходящее видео будет разбито на отдельные файлы, в каждом из которых будет содержаться то количество кадров, которое вы укажете. Правда, есть тонкости при работе этой функции:

    1. Реальное количество кадров в куске будет выставленное плюс 1 (если выставить как показано на картинке, то в каждом куске будет по 25 кадров)
    2. Если выходной поток состоит из ключевых и дельта кадров, то в большинстве случаев, количество кадров, входящих в один кусок, не будет совпадать с выставленным. Это происходит потому, что отдельный видео кусок не может начинаться с дельта кадра, поэтому в предыдущий кусок пишется до первого ключевого кадра, а следующий кусок начинается с этого ключевого кадра.

    "File segment size limit in MB (50-2048):" - здесь задаётся максимальный объём файла, который будет создаваться. При превышении этого объёма, начинается запись следующего куска.

    "Close video file" - эта функция закрывает открытый для редактирования видео файл. По большому счёту, пользоваться этой функцией нет необходимости. У меня по этому поводу есть 2 соображения:

    1. Если файл открыт и производились какие-то настройки фильтров, кодеков… то при открытии следующего файла все эти настройки останутся. По этому, лучше совсем закрыть VirtualDub, а потом запустить заново и открыть нужное нам видео. В этом случае от предыдущих настроек точно ничего не останется.
    2. Если же вам нужно оставить настройки и применить их для следующего видео, то можно его открывать сразу, без закрытия предыдущего (оно автоматически закроется).

    Смотрим далее:

    "File Information" - здесь вы можете посмотреть информацию об открытом видео:

    "Save striped AVI", "Save stripe master" - это довольно интересная функция, но на данный момент она не очень то пригодится. Смысл её сводится к тому, что при записи, видео будет разбито на несколько потоков и будет записываться в разные файлы. Это напоминает работу RAID массивов. Файлы с расширением .stripe создаются в ручную, и в них прописывается, куда и как будет производиться запись. Для тех, кто захочет разобраться подробно, как работает эта функция, я рекомендую взять Help (VirtualDub_help.rar) от первых версий VirtualDub и почитать его.

    "Save image sequence" - вот, вот та функция, которой я люблю пользоваться для определения, на сколько ухудшилось качество видео (или для сравнения разных кодеков). При использовании этой функции, кадры вашего видео будут преобразованы в картинки и записаны в файлы. Потом, мы сможем подробно рассмотреть каждый кадр.

    Рассмотрю поподробнее это окошко:

    "Filename prefix:" - какое-либо имя или символ, который будет добавлен перед названием файлов (точнее говоря их номерами).

    "Filename suffix, include extension:" - окончание имени файла (добавляется после порядкового номера).

    "Minimum number of digits in name:" - количество цифр в порядковом номере. Если поставить 4, то отсчёт начнётся с 0001, 0002… 9999 и после того, как порядковый номер уйдёт за пределы 4 цифр, буде добавлена ещё одна цифра - 10000, 10001…

    "Directory to hold images" - здесь указывается директория, в которую будет производиться запись графических файлов. Для того, что бы выбрать эту директорию, нужно нажать на кнопку "…" в конце этого поля (или же, можно написать в ручную, если вам это больше нравится).

    "First frame filename" и "Last frame filename" - показывают, куда и с какими именами будут сохранены первый и последние файлы картинок.

    "Output format" - выставляется графический формат, в котором будет производиться запись. Я предпочитаю BMP (формат без сжатия), что вы выставите - большого значения не имеет.

    "Don`t run this job now; add it to job control so I can run it in batch mode" - пока я только обещаю рассказать, что даёт отложенная запись, но не рассказываю. Видно не пришёл ещё черёд рассказа, про отложенную запись. Потерпите немного. Если поставить эту галочку, то картинки не начнут записываться сразу, а встанут в очередь отложенных записей.

    Теперь тонкость при работе с этой функцией. Для того, что бы правильно сохранялись картинки, нужно выставить режим работы "Full processing mode" и поставить формат сжатия (Video->Compressin) - Uncompressed RGB. Только в этом случае на формирование изображений пойдёт правильный поток. Далее, когда будете разглядывать картинки, не забудьте, что Mpeg4 кодеки формируют B-frames, которые хуже соседних кадров по качеству.

    "Save WAV" - производит запись звуковой дорожки видеофильма в WAV формате. При пользовании этой функцией, нужно учитывать определённые особенности. Запись в WAV формате не производит декомпрессии сжатого звука, а записывает его как он есть внутри видео файла, просто подставляя заголовок WAV. Я использую эту функцию при монтаже видео. Допустим, я свёл несколько фрагментов в один фильм (производя попутно подрезку, стыковку…). Естественно, что бы потом звук совпал с видео, мне нужно его сохранить вместе со всеми этими обрезками. Вот в этом случае я пользуюсь функцией "Save WAV" (звук у всех фрагментов был не сжат и спокойно сохраняется в WAV формате). Далее, произвожу действия с видео и в последнюю очередь свожу звук и видео.

    Ниже по меню находятся пункты, отвечающие за работу с профайлами:

    "Load processing settings" - Производится запись установок VirtualDub, которые были сделаны для данного видео. Вы спросите, какие же конкретно установки записываются? Да все. Начиная с установок фильтров (видео и аудио) и заканчивая кодеками, установленными для кодирования и их установками. Единственное, что не записывается - системные установки, находящиеся в меню "Options".

    "Include selection and edit list" - если поставить эту галочку, то в профайл запишутся так же и все действия по монтажу видео. То есть, будут записаны все вырезки из монтируемого видео.

    "Save processing settings" - Производится установка параметров VirtualDub из профайла, записанного ранее.

    Теперь разберёмся, что можно делать при помощи файла конфигурации. Допустим, вы подготовили к сжатию видео. То есть, настроили фильтры, сделали все вставки, вырезки, настроили кодеки на сжатие. Сохранили всё это в профайл и запустили на сжатие из VirtualDub. Но… о неудача, размер сжатого видео зашкалил за нужные нам размеры файла. Заново настраивать фильтры, делать вырезки, довольно муторно. Мы просто открываем открытое ранее видео и загружаем профайл. Единственное, что нужно сделать, настроить заново кодек на меньший битрейт и запустить процесс сжатия видео заново. Или, вы ведёте покадровое редактирование 6 часового фильма - вырезка плохих кадров идёт долго и нудно. Как правило, это не получается сделать за один раз. На время перерывов можно записывать вырезки в профайл, а когда настанет время продолжить редактирование, открыть видео и загрузить профайл. Все ранее сделанные вырезки сохранятся и можно будет продолжить с того места, где вы закончили. В целом, эта функция довольно полезная и стоит всегда помнить о её наличии.

    Далее по меню "File"

    "Start frame server" - фреймсервер, хм, попытаюсь объяснить, что это такое. Допустим, вы сделали определённые действия над видео в программе VirtualDub (фильтры, вырезки…) и хотите произвести сжатие в другой программе (например, в формат Mpeg2, ведь VirtualDub этого не может). У нас есть 2 пути решения этой задачи. Первое - сохранить видео в промежуточный файл, сжатый кодеком без потерь (или с минимальными потерями), потом сжимать из этого промежуточного файла в нужной нам программе сжатия. Второй - воспользоваться фреймсервером. Для этого, из VirtualDub запустить фреймсервер и в нужной программе сжатия открыть промежуточный файл фреймсервера. Немного подробнее о работе фреймсервера: при запуске фреймсервера, он создаёт файл на винчестере (в этом файле нет реальных видео данных), при обращении к которому фреймсервер начинает выдавать кадры программе, обратившейся к этому файлу.

    Теперь, о преимуществах и недостатках этих способов. Первый способ - занимает на винчестере много места. Второй способ - довольно медленный, но не требует больших объёмов винчестера. Есть так же третий способ, который предпочитаю я, но он уже не имеет отношения к VirtualDub - воспользоваться утилитой Avisynth, которая позволяет подгружать фильтры от VirtualDub и имеет собственные большие возможности для работы с видео.

    Что такое фреймсервер я рассказал, а вот как им воспользоваться, рассказывать не буду, потому, что сам не имею опыта его использования. Для тех, кто захочет им воспользоваться, могу предложить почитать об этом на странице автора VirtualDub и в уже упомянутом Help от старых версий VirtualDub. Если же вы спросите моих рекомендаций, как лучше всего это делать, то я вам посоветую изучать Avisynth (или ждать, пока появится статья по практическому использованию этой утилиты).

    "Capture AVI" - Эта функция производит захват видео с карт захвата и TV-тюнеров. Работу VirtualDub в этом режиме я описал в статье про захват.

    "Run script" - Происходит запуск скриптов. Что же такое скрипт? Это файл, содержащий команды, которые понятны VirtualDub-у. В результате исполнения скрипта, VirtualDub произведёт какие-либо действия с видео (загрузка видео, включение фильтров, настройка кодеков…). Из самого VirtualDub скрипты пишутся двумя способами. Первый - записать при помощи команды "Save processing settings". При загрузке такого скрипта, его действие будет равноценно загрузке через "Save processing settings". Второй способ на много более интересен. Я уже долго говорю про отложенную запись, настало время рассказать про неё поподробнее. Если при сохранении видео или картинок воспользоваться функцией "Don`t run this job now; add it to job control so I can run it in batch mode", то создастся скрипт, в который будет внесёно задание (файл VirtualDub.jobs в каталоге VirtualDub). В этом скрипте будет указанно всё, что нужно знать VirtualDub-у для сжатия видео (видео источник, все настройки фильтров, настройки кодека сжатия и файл, в который будет производиться запись сжатого видео). Если теперь открыть этот скрипт из VirtualDub, то запустятся на исполнение все задания, ранее внесённые в него (в соответствии с очерёдностью внесения в скрипт - первое внесённое задание будет исполнено первым). Это очень удобно. Например, при работе кодеков в двух проходном режиме, для того, что бы не подходить к компьютеру после первого прохода. Я всегда пользуюсь этим способом.

    "Job control" - А этой функцией можно просмотреть список отложенных заданий и запустить их на выполнение.

    Если удалить файл VirtualDub.jobs, то все задания из этого списка удалятся. Теперь посмотрим, как мы можем воспользоваться этой функцией. Здесь есть кнопки, которыми можно управлять работой скрипта.

    "Move up" - эта кнопка передвигает выделенное задание выше по списку отложенных записей.

    "Move down" - эта кнопка передвигает выделенное задание ниже по списку отложенных записей.

    "Postpone" - эта кнопка приостанавливает выполнение задания. То есть, если запустить скрипт, то приостановленное задание не будет выполнена.

    "Delete" - удаляет задание из списка отложенных записей.

    "Start" - запускает на выполнение выделенную отложенную запись. Если после этого не остановить выполнение задания, то будут выполняться все задания по очереди.

    "Abort" - останавливает выполнение задания.

    Линейка "Current job" показывает процент выполнения задания.

    Я не люблю пользоваться запуском заданий из этого списка. Причин тому несколько. При запуске заданий в качестве скрипта (функция "Run script") в окошке "VirtualDub Status" мы видим результаты выполнения задания, а при запуске задания из "Job control" видно только процент выполнения очередного задания. Так же, при запуске скрипта, из окошка "VirtualDub Status" можем управлять приоритетом выполняемого задания, что иногда очень пригодится. Например, вы заняты какой-то работой в Word или Excel и параллельно у вас идёт сжатие видео в программе VirtualDub. Если VirtualDub будет иметь нормальный приоритет, то все действия будут выполняться с жуткой натяжкой - весьма медленно. Но если присвоить в окошке "VirtualDub Status" приоритет "Idle", то Word весело забегает. Кодирование в VirtualDub будет происходить в то время, когда вы не производите никаких действий в других программах.

    Ну и в конце выпадающего списка мы увидим список из последних 4 открываемых файлов (для обеспечения возможности их быстрого открытия) и опцию "Quit" - выход их VirtualDub.

    Меню Edit

    Второй раздел в панели меню - "Edit". В этой панели находятся инструменты для навигации и редактирования.

    Сверху идёт раздел редактирования видео. Здесь всё абсолютно стандартно. Пожалуй, я бы скорее использовал этот раздел для ознакомления с горячими клавишами. Горячие клавиши лучше запомнить и использовать их в процессе редактирования видео. Это здорово сэкономит время.

    "Cut" - вырезает (c копированием в буфер) помеченную область видео. Разметка видео производится клавишами "Home" и "End" или из этой же панели функциями "Set selection start" и "Set selection end". При этом, помеченная область будет выделена синим цветом на панели навигации.

    Для того, что бы передвигаться по видео, можно передвигать слайдер или пользоваться клавишами навигации по видео. Одновременно выделить можно только один кусок, так что не старайтесь выделить несколько.

    • "Copy" - копирует помеченную область видео в буфер. После этого, при команде "Paste", эта область будет вставлена туда, где находится слайдер.
    • "Paste" - вставляет видео из буфера.
    • "Delete" - удаляет помеченную область видео.
    • "Clear selection" - удаляет метки выделения.
    • "Select all" - эта функция производит выделение всего видео, которое загружено в VirtualDub.

    Далее, идут функции навигации по видео.

    • "Beginning" - возвращает слайдер движения по видео на начало видео, загруженного в VirtualDub.
    • "End" - переводит слайдер движения по видео на конец видео, загруженного в VirtualDub.
    • "Previous frame" - переводит слайдер движения по видео на предыдущий кадр. Какого-то передвижения слайдера вы не увидите потому, что сдвиг на 1 кадр очень мал по отношению к количеству кадров во всём видео. Но проконтролировать этот сдвиг можно.

    На панели навигации показывается, на каком кадре вы сейчас находитесь, какое время прошло от начала видео, и на каком типе кадра вы сейчас находитесь (ключевой, дельта или dropped (пропущенный)).

    "Next frame" - переводит слайдер движения по видео на следующий кадр.

    "Previous keyframe" - переводит положение слайдера на предыдущий ключевой кадр. Этой функцией удобно пользоваться для быстрого передвижения по видео. Если вы открыли видео сжатое кодеком, в котором есть ключевые и дельта кадры, при поиске кодек будет привязываться к ключевым кадрам.

    Теперь, если начать произвольно передвигать слайдер по видео, то картинка будет отображаться не сразу, а с определённой задержкой, которая бывает весьма большой. Если же передвигаться только по ключевым кадрам, то картинка отображается моментально и VirtualDub очень быстро передвигается по открытому видео.

    Есть ещё один резон, зачем нужна эта функция. Допустим, у вас есть видео сжатое кодеком с ключевыми и дельта кадрами. Вам нужно без пережатия (чтобы не попортить картинку), удалить определённые куски. Для этого вы включите "Direct stream copy" (подробнее об этом позже) и вырежете не нужные вам куски. Но после сохранения может оказаться, что сохранилось то, что вы вырезали или не сохранилось то, что вы оставляли.

    Это не полтергейст, это работа по ключевым кадрам. Кодеки с ключевыми кадрами не могут начать показывать изображение с дельта кадров, они отталкиваются от ключевых кадров и если перед дельта кадром не будет ключевого, то картинка развалится.

    Теперь, что происходит, когда вы пытаетесь что-то вырезать в VirtualDub не по ключевым кадрам. Вы указываете на дельта кадр, до которого (или от которого) нужно вырезать, VirtualDub послушно его вырезает. Но когда вы сохраняете видео, программа видит, что обрезка была сделана не по ключевому кадру и компенсирует этот недостаток - обрезка происходит до ближайшего ключевого кадра (ну не может он начать работу без ключевого кадра).

    Таким образом, происходит перескок с того кадра, который вам нужно вырезать, на ближайший ключевой кадр. Так вот, что бы знать заранее, на какой кадр произойдёт перескок при сохранении, можно пользоваться переходом по ключевым кадрам. А ещё лучше сразу вырезать по ключевым кадрам (пользуясь переходами по ключевым кадрам). В этом случае вы будете видеть результат ещё до сохранения.

    "Next keyframe" - переход на следующий ключевой кадр. Если вы находитесь между двумя ключевыми кадрами, то переход будет осуществлён на правый (по линейке VirtualDub).

    "Back 50 frames" - возвращает слайдер на 50 кадров назад по видео.

    "Forward 50 frames" - переводит слайдер на 50 кадров вперёд по видео.

    "Previous drop frame" - переводит слайдер на предыдущий пропущенный кадр (drop). Пропущенные кадры появляются при захвате видео. Можно посмотреть, как много их на вашем материале, для этого применяется эта функция.

    Её можно так же использовать для удаления пропущенных кадров из видео, но при этом может возникнуть проблема рассинхронизации видео со звуком (допустим при раздельной обработке звука и видео).

    "Next drop frame" - переводит слайдер на следующий пропущенный кадр (drop).

    "Previous range" - эта функция производит перевод слайдера на предыдущий фрагмент. Фрагментами считаются те места, где производилась вырезка, вставка или специальная пометка фрагментов. При этом, если производилась вырезка, слайдер становится на месте вырезки и снизу, в информационной строке, указывается, какой диапазон кадров будет входить в следующий фрагмент и какие кадры источника будут в него входить.

    Если же производилась вставка, то при переходе по фрагментам, слайдер будет останавливаться дважды - в начале и в конце вставленного фрагмента, при этом в информационной строке будет указываться диапазон кадров следующего диапазона и какие кадры источника в него вошли.

    • "Next range" - переход на начало следующего фрагмента.
    • "Move to selection start" - ставит слайдер в начало выделенной области.
    • "Move to selection end" - ставит слайдер в конец выделенной области.
    • "Go to…" - а по этой функции происходит перемещение слайдера на заданный кадр.

    Кадр можно задать, как его номером ("Jump to frame number"), так и нахождением его во времени ("Jump to frame at time"). Ну и в конце списка меню, находятся функции расставления меток.

    "Set selection start" - устанавливает метку начала выделенной области. При расстановке меток учтите, что можно поставить только одну метку начала и одну метку конца фрагмента. И как следствие этого, если вы повторно нажмёте установку метки начала, то она будет поставлена вновь, а область будет начинаться уже с этого момента.

    • "Set selection end" - устанавливает метку окончания выделенной области.
    • "Mask selected frames" - превращает выделенную область во фрагмент. То есть, метки выделения исчезнут, но на них можно будет попасть переходом по фрагментам.
    • "Unmask selected frames" - снимает все выделения фрагментов.
    • "Revert all edits" - удаляет редактирование, которое было произведено с видео. Попросту, загружает видео вновь.

    Меню Video

    Вот мы и добрались до главного раздела в панели меню - "Video".

    Первая опция, пожалуй, одна из самых нужных в VirtualDub - "Filters".

    При помощи фильтров в VirtualDub можно производить очистку видео от шумов и искажений, накладывать (убирать) Лого, изменять яркость-контрастность-насыщенность, производить операции с полями, изменять размеры изображения и много всего другого. Короче говоря, здесь находятся инструменты для обработки видео. Теперь о том, как работать с фильтрами. В окошке выбора фильтров "Filters" показываются фильтры, которые вы выбрали для работы. Кнопка "Add" выводит нас на окно выбора фильтров:

    Здесь вы можете выбрать фильтр, который будете применять для обработки видео. В этой статье я не буду перечислять, какие фильтры что делают, это займёт много места и уведёт в сторону от работы в VirtualDub. Но следом обещаю написать статью по использованию фильтров VirtualDub.

    Допустим, вы выбрали какой-нибудь фильтр и нажали "Ok". Сперва нас выкинет в окошко настройки фильтра (если он нуждается в настройке), а потом мы вновь окажемся в окошке "Filters" и выбранный нами фильтр будет в конце списка.

    Кнопка "Delete" удаляет фильтр, на котором остановлен выбор.

    Кнопки "Move Up" и "Move Down" передвигают фильтры по списку вверх и вниз. Зачем это надо, как-нибудь потом.

    Кнопка "Cropping" производит обрезку картинки со всех сторон. Это нужно для того, что бы убрать не нужные чёрные полосы и загибы изображения по краям (они обычно бывают после захвата) или просто вырезать нужную нам часть изображения. Обрезку можно производить перед любым фильтром. Для этого, нужно навести на фильтр, перед которым вы собираетесь произвести обрезку, нажать на кнопку "Cropping" и произвести обрезку.

    На картинке видно, что перед 3 фильтром сверху была произведена обрезка. При обрезке, нужно учитывать, что есть фильтры, которые работают только с чётным разрешением, а есть те, которые работают с разрешениями, делящимися на 4, а есть и особо привередливые - требуют, что бы видео на их входе было кратно 16.

    На выходе с последнего фильтра нужно стараться, что бы разрешение было кратно 4 (для данного случая на выходе разрешение 320*240). Это связанно с тем, что, большинство кодеков используют YUY2 формат цветности. Если же исходить из общих рекомендаций разрешения видео, лучше делать, что бы ширина была кратна 32, а высота 16. Эти рекомендации не связаны с работой кодеков, а предназначены для облегчения работы плееров, показывающих видео.

    В полях, помеченных красным выставляются значения на сколько производить обрезку с каждой из сторон. Делать можно это 3 способами.

    1. Поставить цифровое значение вручную.
    2. Нажимать на кнопочки верх-низ (рядом с цифровым значением) и подгонять обрезку до нужного значения.
    3. Взять мышью за линию обрезки и потянуть в нужную сторону. Это наиболее удобный способ, но тонкую подгонку удобнее делать 2 способом.

    И последняя кнопка "Configure". Она производит включение настройки фильтра, на котором остановлен фокус.

    Что ж, о фильтрах конкретнее в другой статье, а сейчас пойдём ниже по списку функций в меню "Video".

    Функция "Frame rate" позволяет изменить частоту кадров видео. Есть 3 вида изменения частоты кадров: изменение индекса частоты кадров (приводит к замедлению или ускорению видео, соответственно изменяется продолжительность видео), реальное изменение количества кадров в секунду (достигается выкидыванием или дублированием кадров, не приводит к изменению продолжительности) и снижение частоты кадров выкидыванием полей (этот способ достаточно подробно рассмотрен мною в этой статье). Для каких целей вы собираетесь это использовать - ваше дело, но пару советов осмелюсь дать.

    Первый способ может пригодиться, пожалуй, только для баловства. Качественное ускорение или замедление видео этим способом вы не получите. Для этого есть специальные монтажные программы. А если учесть нестандартные частоты кадров, которые вы получите, то функция становится практически не нужной.

    Второй способ поможет проредить видео (понизить частоту кадров) для публикации в Интернете, следящих систем и других источников, где не важно содержание каждого кадра и не требуется передача динамики. Этим способом изменения частоты кадров можно понизить видео поток или подогнать видео под какие-то конкретные значения (например, вам нужно переделать из 25 кадрового видео в 30 кадровое). Видео поток сжижается со снижением частоты кадров.

    Третий способ необходимо использовать при получении фильмов в формате NTSC, снятых на киноплёнку. Есть ещё несколько поводов его использовать, но в VirtualDub есть реализация только выкидывания 12 полей из 30 кадров (InverseTelecine).

    Давайте же посмотрим на окошко VirtualDub функции "Frame rate".

    "Source rate adjustment" - поле настройки заголовка частоты кадров. Это первый способ изменения частоты кадров (с соответствующими последствиями).

    • No change - оставляет частоту кадров без изменений
    • Change to … frames per second - изменяет индекс частоты кадров до выставленной вами частоты
    • Change so video and audio durations match - производит подгонку частоты кадров до выравнивания продолжительности звука и видео

    "Frame rate conversion" - Это производится вторым способом.

    • Process all frames - обрабатывает из исходного видео все кадры
    • Process every other frame (decimate by 2) - из исходного видео берётся только каждый второй кадр (деление частоты кадров на 2)
    • Process every other frame (decimate by 3) - из исходного видео берётся только каждый третий кадр (деление частоты кадров на 3)
    • Decimate by … - деление частоты кадров на произвольный множитель.
    • Convert to fps … - преобразует частоту кадров к заданному значению. Но, в продолжение темы скажу, что практическую пользу может принести только уменьшение частоты кадров (поводы перечислены выше)

    "Inverse telecine (3:2 pulldown removal)" - функция, выкидывающая 12 полей из 30 кадров. Это нужно для возвращения нормального 24 кадрового фильма из 30 кадрового формата NTSC. Этот процесс принесёт пользу, только если изначально фильм был снят на киноплёнку (24 кадра), а потом переведён в формат NTSC (30 кадров).

    • None (progressive) - не производит никаких действий с полями
    • Reconstruct from fields - adaptive - автоматическое выкидывание одинаковых полей в соседних кадрах. Качество работы этой функции я не проверял, поэтому эффективность её работы мне не известна. Для работы с полями я предпочитаю Avisynth.
    • Reconstruct from fields - manual - ручное выставление порядка полей для работы функции InverseTelecine. На самом деле, выставляется не порядок полей, а первый кадр, с которого начинала работу функция "3:2 pulldown" (или "Telecine"). Выставив первый кадр, остальное высчитывается автоматически. Для задачи первого кадра используется опция "Offset …". Ручной метод - весьма не удачная мысль работы с функцией InverseTelecine. Дело в том, если выпадет хоть один кадр из видеоряда, то произойдёт ошибка высчета (смещение) выкидываемых полей и видео будет только испорчено.
    • Reconstruct from blurred fields - manual - если исходить из названия функции, то производится удаление полей из материала с размытыми полями. То есть, на вход подаётся достаточно поношенное видео (где кадры подвергались размытию в результате хранения на магнитных лентах или после каких-либо обработок) при удалении дублированной пары полей, кадр может получиться с подобием интерлейсной расчёски. Для удаления этого эффекта можно будет воспользоваться деинтерлейсом (что повлечёт за собой ещё большее размытие картинки) или включить этот метод обработки полей. Так же, как и предыдущий метод, его работа определяется параметрами, выставляемыми вручную ("Offset …" и "Invert polarity").
    • Offset … - выставление первого кадра для ручного режима работы функции InverseTelecine.
    • Invert polarity - инвертирует работу функции InverseTelecine. Это не приводит к преобразованию полей и относится только к математическому аппарату функции InverseTelecine. Всё дело в том, что задавая смещение функцией "Offset …", мы не знаем, в какую сторону потом пойдёт работа функции InverseTelecine (с верхнего поля или нижнего). Для того, что бы была возможность выставить все варианты работы и предназначена эта опция.

    Немного ниже по списку функций находится опция "Color Depth":

    Здесь можно произвести выбор цветового формата, в котором будет работать VirtualDub. По большому счёту, VirtualDub работает только в форматах RGB, а все входящие форматы преобразует в них. Исключение составляют режимы работы "Direct stream copy" и "Fast recompress", которые не производят преобразования к RGB, но в этих режимах не будут работать фильтры и другие интересности VirtualDub. Но об этом чуть ниже.

    "Decompression format" - позволяет выбрать, в каком формате будет происходить получение видео от декодера.

    • 16-bit (HiColor/32K) - получает от декодера 16 битное видео. Первый кодер из серии Divx (DivX3) работал именно в этом цветовом формате. Если нет какого-то особого резона (например, использование DivX3 для декодирования), не стоит включать этот режим.
    • 24-bit(TrueColor/16M) - большинство современных кодеков работает в этом цветовом формате. Он стоит по умолчанию. Конечно, можно заставить выдавать кодеки и 16-bit режиме, но это вызовет определённые искажения.

    "Output format to compressor/display" - цветовой формат, в котором видео выдаётся на кодер и для просмотра.

    • 16-bit (HiColor/32K) - в этом формате потребуется выдавать разве что для DivX3 но его использование с VirtualDub не оправданно (для него сделан NanDub).
    • 24-bit(TrueColor/16M) - стоит по умолчанию и работает практически со всеми кодеками.
    • 32-bit(TrueColor/16M+alpha) - почему-то автор отнёс к 32 битному изображению и канал альфа (канал прозрачности), но внутри самого VirtualDub используется RGB32 (для фильтров) и я так понимаю выдаваться будет в этом же RGB32. Из кодеков, известных мне, VP6 работает с этим форматом цветности.

    Далее, в выпадающем меню "Video" идёт пункт "Compression". Это меню выбора кодека, при помощи которого будет происходить сжатие вашего видео.

    Какой кодек выбирать - ваше дело. Есть кодеки, которые широко употребляются и стали практически де-факто (DivX). Есть и другие кодеки, которые дают не худшее качество, но не получившие широкого распространения. Собственно, каждый кодек будет хорош для какой-то своей задачи. На картинке я обвёл цифры, показывающие, с какой глубиной цветности может работать кодек (для данного случая это RGB16 и RGB24). При нажатии на кнопку "Configure" появляется окошко настройки кодека. У каждого кодека оно сугубо индивидуально, поэтому дальше рассматривать я не буду. Для некоторых кодеков требуется внешнее управление битрейтом и расстановка ключевых кадров. При выборе такого кодека становятся доступны два поля:

    • "Use target data rate of … kilobytes/second" - Для того, что бы задействовать эту функцию нужно поставить галочку в заголовке и выставить битрейт, с которым вы собираетесь сжимать.
    • "Force keyframes every … frames" - здесь выставляется количество кадров, после которого будет поставлен ключевой. Функция включается в работу так же, выставлением галочки в заголовке.

    Больше ничего интересного на вкладке выбора кодека нет. Перейдём на следующую функцию меню "Video".

    "Select range" - позволяет выделить то видео, которые будут обрабатываться в VirtualDub. Для каждой опции есть два поля, в первом выставляется время в миллисекундах (1 секунда = 1000 миллисекунд), во втором выставляется номер кадра, а который приходится это время. Выставлять можно или время, или номер кадра, значения не имеет.

    "Start offset" - начальный отступ видео. То есть, если выставить сюда какое-то значение, то обработка начнётся с этого кадра (или с этого времени).

    "Length" - здесь выставляется продолжительность обрабатываемого видео.

    "End offset" - отступ видео от конца. То есть, на выставленное здесь значение, видео будет укорочено с конца.

    "Offset audio to maintain a/v sync" - делает отступы звука для поддержания синхронизации с видео. Действует только в том случае, если вы воспользовались каким-нибудь пунктом выделения видео.

    "Cut off audio when video stream ends" - если продолжительность звука больше продолжительности видео, то оно будет обрезано с конца.

    Вот мы и дошли до основных режимов работы с видео.

    В меню "Video" можно сделать выбор между 4 режимами работы, которые определяют, в каком режиме VirtualDub будет производить обработку видео.

    "Direct stream copy" - при включении этого режима, VirtualDub не будет производить никаких действий с видео. То есть, мы не можем произвести никаких действий с картинкой (подрезка, наложение фильтров). Более того, даже нельзя изменить кодек, при помощи которого было сжато видео. Сразу оговорюсь, что в VirtualDub можно открыть Mpeg1 формат видео, но сохранить в этом режиме будет невозможно, это связано с тем, что VirtualDub не работает с Mpeg форматами сохранения файлов. Скажем так, VirtualDub сможет сохранить видео в этом режиме, если был открыт AVI файл. Теперь о пользе этой функции. Её смысл в том, что видео из оригинального файла переносится без каких бы то ни было изменений, но его можно переносить не полностью, а кусками. То есть, открываем видео в VirtualDub, производим все вырезки, вставки (в смысле перенос кусков видео из одного места в другое, взять из другого файла не получится), включаем режим "Direct stream copy" и сохраняем. При вырезках и вставках видео не забываем про работу с ключевыми кадрами, по которым производится вся работа (подробнее я описывал выше). Сохранение видео произойдёт очень быстро. При этом в видео не вносится никаких искажений (не производится повторного сжатия). Естественно, для просмотра видео, сохранённого таким образом, будет применяться тот же самый кодек, что и в исходном видео. Для чего же мы ещё можем применить этот режим. Например, нам нужно соединить видео со звуком (или заменить одну звуковую дорожку на другую). Для этого, в меню "Audio" открываем нужный файл со звуком, а в меню видео включаем режим "Direct stream copy". После сохранения у нас будет новый файл, в котором видео уже будет с новым звуком. Так же, в этом режиме мы можем изменить частоту кадров для видео. В работе этого режима есть одна главная особенность: при включённом режиме "Direct stream copy" в меню "Video", видео сохраняется без изменений.

    "Fast recompress" - при включении этого режима, видео передаётся на кодер в том же цветовом формате, что и выдал декодер видео. Я уже говорил, что VirtualDub работает в цветовом формате RGB, но это не является панацеей. Такой формат цветности нужен только если производится обработка видеоматериала фильтрами. Если же производится только приём видео и сжатие кодеками, то нет никакого смысла переводить видео в RGB формат (так например происходит обработка материала после Avisynth). Если же переводить в RGB (а кодек потом переведёт видео ещё в какой-то свой формат), то происходит хоть и минимальная, но потеря времени, а в некоторых случаях ещё и искажения картинки. Про искажения - это частные случаи, но они иногда происходят. Рассказывать о них довольно долго, смысл их сводится к тому, что видео несколько тускнеет, если его выдавать в RGB форматах (так, например, работают DV декодеры). Итак, какие можно сделать выводы по этому режиму работы? Его нужно использовать, если вы не производите никакой обработки видео в VirtualDub, но собираетесь сжать видео каким-либо кодеком. Противопоказание этому режиму только одно - кодек, который вы применяете для сжатия видео, должен понимать тот формат цветности, в котором выдаёт декодер видео.

    "Normal recompress" - в этом режиме VirtualDub будет принимать от декодера видео в RGB формате. От предыдущего режима работы его будет отличать большая всеядность кодеров. То есть, если вам попался какой-то кодек, который отказывается принимать тот входной формат видео, который выдаёт декодер, то можно переключится в этот режим работы и произвести сжатие (форматы RGB понимают практически все кодеки). От предыдущёго режима его буде отличать более медленная работа (пренебрежимо мало), и возможное наличие той проблемы с картинкой, про которую я писал.

    Так же, этот режим работы можно использовать для конвертации RGB16 (если декодер выдаёт в этом формате) в RGB24 или RGB32 для последующего сжатия в кодеках не понимающих RGB16. Это будет происходить быстрее, чем использовать режим "Full processing mode". Делается это при помощи функции "Color Depth".

    "Full processing mode" - этот режим работы стоит по умолчанию и позволяет включать любые настройки VirtualDub. Как я уже говорил, для работы фильтров VirtualDub нужен формат RGB32. VirtualDub производит конвертирование входного формата в RGB32 и после этого выдаёт на фильтры. Включение этого режима необходимо, когда вы собираетесь производить полную обработку видео в VirtualDub.

    Перейдём теперь к последнему набору функций меню "Video".

    "Copy source frame to clipboard" - производит копирование текущего кадра в буфер. Копируется оригинальный кадр из открытого видео. После этой операции, можно вставить куда-либо этот кадр (например, в программе Photoshop вставить в изображение).

    "Copy output frame to clipboard" - производит копирование текущего кадра в буфер. Но в отличии от предыдущей функции, копироваться будет не кадр источника, а кадр после обработки в VirtualDub. То есть то, что будет выдаваться кодеку на сжатие, учитывая все фильтры обработки видео, которые были вами настроены.

    "Scan video stream for errors" - производит проверку источника видео на ошибки. Ошибки могут возникать при передаче AVI файла по каким-либо сетям, копировании AVI файла с плохо читаемого диска при помощи программ, предназначенных для копирования сбойных участков и других вариантов, когда возможна неверная передача информации. После выполнения проверки видео в информационной строке будет выдано количество испорченных кадров, а сами испорченные кадры будут выделены, как фрагмент.

    В этой информационной строке говорится о том, что испорчен 1 кадр, в результате этого, 48 последующих кадров (до ключевого) не могут быть декодированы. Сразу скажу, что в самом VirtualDub эта функция реализована не очень удачно. После того, как найдены "битые" кадры их нужно удалять (другого метода восстановить читаемость всего видео я не знаю). При попытке перейти на начало "битых" кадров, как на начало фрагмента (к сожалению, в информационной строке не выдаются номера битых кадров и перейти на них можно только, как на начало фрагмента) за частую, VirtualDub просто вылетает с ошибкой. На много более удачно эта функция реализована в VirtualDubMod. В ней, после поиска "битых" кадров, есть возможность удалять все найденные испорченные кадры. Если вам нужно будет воспользоваться этой функцией, то я рекомендую это делать при помощи VirtualDubMod.

    "Error mode" - производит переключение режимов сканирования на ошибки.

    "Report all errors" - производит отслеживание всех ошибок, возможных при декодировании видео.

    "Conceal errors and resume decoding at next keyframe" - при поиске ошибок в этом режиме, после нахождения ошибки, VirtualDub не будет сканировать поток дальше, а перейдёт на следующий ключевой кадр и продолжает сканирование. Смысл этой функции в том, что при нахождении ошибки в дельта кадре, следующий кадр будет выстроен из него, то есть, ошибка будет кочевать из кадра в кадр, до тех пор, пока не придёт ключевой кадр. В ключевом кадре есть вся информация для построения полного кадра. В связи с этим, кадры, попавшие между ключевым и испорченным, будут также испорчены и нет смысла их сканировать.

    "Decode even if the result may be garbled" - отслеживает ошибки даже в том случае, когда результат может быть искажён. То есть, когда результат обнаружения ошибки не может быть 100%, VirtualDub будет продолжать поиск ошибок.

    Меню Audio

    Честно признаюсь, для меня это раздел "мертвый". Причина тому следующая - получить качественный звук системными кодеками (а именно ими пользуется VirtualDub) практически невозможно. Исключение составляет формат WAV (несжатый формат), но он занимает очень много места и для практических целей при сохранении видео не подходит. Что я делаю со звуком, для хранения с видео, расскажу в следующей статье, а пока рассмотрим меню "Audio".

    "Interleaving" - эта функция отвечает за то, каким образом звук будет внедрён в AVI файл. При выборе этой функции появится следующее окно:

    "Enable audio/video interleaving" - включает режим переплетения видео и звука. Этот режим используют практически всегда, и является де-факто при сохранении видео. Смысл его в том, что в AVI файл звуковой и видео потоки записываются не параллельно (идущими не зависимо друг от друга), а чередующимися. То есть, к определённому кадру привязывается определённый кусок звука. При этом, значительно понижается возможность рассинхронизации звука и видео (но не исключает её).

    "Preload … ms of audio before video stats" - здесь выставляется значение продолжительности звука, который будет загружаться до начала показа кадра. Теоретически, увеличение этого значения повысит стабильность воспроизведения звука, но на практике может получиться наоборот. По умолчанию стоит 500 ms, как правило, это значение не изменяют. Но может получиться, что у вас видео или звук пойдут рывками или начнут отставать друг от друга. В этом случае можно поэкспериментировать с этим значением до получения стабильных результатов.

    "Interleave audio every … frames (ms)" - здесь выставляется значение в кадрах (миллисекундах), через которое нужно вставлять следующий кусок звука. Естественно, чем больше это значение, тем большая продолжительность звука будет вставлена в эти промежутки. При этом надо учесть, что время презагрузки звука ("Preload … ms of audio before video stats") то же должно быть увеличено.

    "Delay audio track by … ms" - устанавливает задержку начала воспроизведения звука от начала воспроизведения видео. Это нужно будет в том случае, когда первый кадр видео не совпадает с началом звуковой дорожки. Выставляя положительное значение в миллисекундах (1000 миллисекунд = 1 секунде), мы производим задержку начала воспроизведения звука при начале воспроизведения видео. Это всё относится только к видео (+звук) сохранённому в AVI файл.

    Именно внутри сохранённого AVI файла и будет происходить задержка. Если же выставить отрицательное значение задержки, то воспроизведение звука начнётся раньше, чем начнётся видео на это значение. Реально, звук не начнётся раньше, а просто обрежется с начала на ту величину, которую вы выставите в отрицательном значении.

    Посмотрим, какая функция находится ниже в меню "Audio"."Compression" - позволяет выбрать звуковой кодек, при помощи которого будет производиться сжатие звука. Как я уже говорил, я предпочитаю не использовать системные кодеки, но в случае крайней нужды (или не слишком ответственной работы), можно воспользоваться и этими кодеками. Окошко выбора звукового кодека выглядит так:

    В левом окошке находится список кодеков, при помощи которых вы можете сжать звук. Сразу предупрежу, 100% результат, что у вас что-то получится, дадут только MP3 (MPEG Layer-3) и "No compression (PCM)". Дело в том, что не смотря на присутствие других кодеков, многими из них нет возможности воспользоваться. После того, как вы выбрали кодек, в правом окошке появится список параметров, с которыми можно использовать этот кодек. Если поставить галочку "Show all formats", то список режимов станет ещё больше.

    Единственное, что я могу порекомендовать в этом месте - выбирать режим в соответствии с той частотой дискретизации и уровнями квантования, на которых сделан оригинал звука.

    В следующем разделе панели "Audio" находятся инструменты, применяемые для фильтрации и преобразования звука.

    "Use advanced filtering" - при выборе этой опции включается режим работы с "продвинутыми" фильтрами. Продвинутость их состоит в том, что можно будет присоединить внешние фильтры обработки звука, а можно воспользоваться внутренними, более функциональными фильтрами VirtualDub. При выборе этой опции становится доступна функция "Filters".

    "Filters" - эта опция отвечает за построение фильтров обработки звука. При выборе этой опцию, появляется окно настройки графа аудио фильтров.

    На этой картинке я построил граф обработки звука, при определённой настройке которого (настраиваются высокочастотный и низкочастотный фильтры), можно создать режекторный фильтр (не пропускает определённые частоты). На самом деле, построение графа, несколько отличается от работы в стандартных звуковых редакторах. При определённом навыке, можно научится делать простые преобразования звука, но если это делать в программах, специально предназначенных для обработки звука, то это будет и проще и качественнее. Я не хотел бы подробно останавливаться на данном пункте (в связи с тем, что сам не работаю с ним). Быстро пробегу, только в ознакомительном порядке.

    "Clear" - очищает поле графа. То есть, удаляет все фильтры, которые вы выставили.

    "Add" - добавляет фильтр на поле графов. Когда появится окно добавления фильтров, отведите его в сторону от окна графов. Так будет на много удобнее работать, можно и фильтры добавлять и смотреть, что получилось. С полным списком фильтров я знакомить не буду, внизу окна выбора фильтров, выводится маленькая подсказка, что этот фильтр делает, а настроек эти фильтры не требуют (за редким исключением). Единственное, что подскажу, все графы должны начинаться с фильтра "Input" и заканчиваться "Output". Это говорит о том, что нужно взять звуковую дорожку из VirtualDub и отдать её обратно после обработки.

    "Delete" - удаляет фильтр, на котором находится фокус.

    "Test" - начинает воспроизведение звуковой дорожки, взятой из VirtualDub, с применением фильтров (построенного графа). При этом, можно прослушать, какой стал звук после обработки и продолжить настройку графа или нажать "Ok" и звук на сохранение пойдёт уже в этом виде.

    "Arrange" - при нажатии на эту кнопку, произойдёт автоматическая расстановка фильтров для более наглядного просмотра.

    "Configure" - нажатие на этой кнопке равноценно двойному щелчку мыши на каком-либо фильтре. Это нужно для тех фильтров, которые требуют настройки (например, фильтры), при этом появится окно настройки фильтра.

    "Auto-connect" - если поставить эту галочку, то при добавлении нового фильтра, он автоматически подключается к графу. Это довольно удобно и редко приходится в ручную расставлять соединения фильтров. Если же вам нужно выставить в ручную соединение одного выхода фильтра с входом другого, просто потяните левой клавишей мыши от выхода ко входу и отпустите.

    "Auto- arrange" - при выставлении этой галочки, добавление нового фильтра происходит упорядочено, а не в произвольном месте.

    Будем считать, что ликбез по аудио фильтрам VirtualDub-а закончен. Пойдём дальше, по более простым, но чаще употребляемым функциям.

    В списке меню "Audio", после фильтров идёт пункт "Conversion". Он отвечает за перевод звука из одного формата в другой. Объясню, что я отношу к слову формат звука: частоту дискретизации, число уровней квантования и количество каналов (моно, стерео). Первые два относятся к цифровому звуку. Как я уже упоминал при разговоре о звуковых кодеках, при сжатии звука, нужно будет обратить на формат входного звука. Если у вас не совпадёт частота дискретизации входного звука и частота дискретизации кодека, то просто выпадет ошибка. Но если вы для 16-bit звука примените 8-bit кодек, то получите катастрофическое падение качества звука. Обратите на это внимание. Так вот, вкладка "Conversion" предназначена для перевода звука из одного формата в другой.

    Для того, чтобы изменить частоту дискретизации звука, нужно просто поставить выбор на той частоте дискретизации, которую вы хотите сделать. Для этого предназначена функция "Sampling rate". Только учтите, что понижение частоты дискретизации понижает качество звука, а повышение частоты дискретизации не улучшит ни каких характеристик (лучше оригинала всё равно не сделаешь). Стоит использовать эту функцию только для определённых, известных вам целей. Например, для звукового кодека необходима частота дискретизации 44100 герц, а при видео захвате у вас получилось 44056 герц (такое бывает, когда видео идёт мастер потоком). Для подготовки звука к сжатию, делаем конвертацию звука в нужный нам формат и никаких проблем. Понижение частоты дискретизации так же иногда может пригодиться. Например, вы собираетесь применить кодек с сильным сжатием. При этом, чем выше частота дискретизации, тем тяжелее кодеку справится со звуковым потоком. Мы можем понизить частоту дискретизации (относительно оригинала) и кодек выдаст более качественный звук, чем это было бы без неё.

    Далее, функция "Precision" позволяет выбрать, какое квантование использовать для звука. Сразу скажу, что повышение числа уровней квантований (из 8-bit в 16-bit) не даст никакого результата. Снижение уровней квантования ухудшит качество звука, вместе с этим упростив работу кодека. Поток звука на него пойдёт значительно меньше.

    Функция "Cannels" в особых комментариях не нуждается. При включении "Mono" происходит смешивание каналов. При включении "Left" или "Right" происходит запись моно сигнала, который будет взять из левого или правого канала соответственно. Пойдём дальше по меню "Audio". Ниже находится функция "Volume".

    C ней всё предельно просто. При установке галочки "Adjust volume of audio channels" можно будет отрегулировать уровень громкости выходного сигнала. С одной стороны, это весьма полезная функция (уровень входного сигнала далеко не всегда идеальный), а с другой весьма не удобная. Нет индикатора выходного сигнала, поэтому мы не можем никак сориентироваться, что надо сделать с уровнем звука, повысить или понизить.

    Ниже, в списке функций меню "Audio", находятся опции, отвечающие за источник звукового сигнала.

    Здесь можно сделать выбор, что будет обрабатываться в VirtualDub.

    "No audio" - на вход VirtualDub не подаётся никакой сигнал. Естественно, в выходном AVI файле так же не будет никакого звука.

    "Source audio" - при выборе этой опции, на вход VirtualDub подаётся сигнал из открытого видео. Это опция стоит по умолчанию.

    "WAV audio" - позволяет выбрать внешний источник сигнала. На вход VirtualDub можно подавать только WAV сигнал. Это большой недостаток. Тем самым, нас заставляют пользоваться системными кодеками для сжатия сигнала (исходный WAV сигнал имеет очень большой объём и использовать его для сохранения в конечном AVI файле не разумно). Для работы со звуком других форматов написано множество программ. Например, VirtualDubMod может работать с множеством звуковых форматов, поэтому, для работы со звуком я рекомендую именно его.

    Вот мы и дошли до последних опций списка меню "Audio".

    "Direct stream copy" - включает режим прямого копирования звука из источника в итоговый AVI файл. Так, если вы выбрали источник через "WAV audio" и выбрали эту опцию, то в итоговом AVI файле будет выбранный WAV звук именно в том формате, в котором был он в файле. То есть, не будет происходить ни сжатия, ни каких других изменений. Если же поставить источником "Source audio", то звук из исходного AVI перекочует в получаемый AVI, не зависимо от того, был он сжат или нет.

    "Full processing mode" - при выборе этой опции будет возможна обработка звука в VirtualDub. При этом, можно будет использовать фильтры, изменять уровень громкости и необходимо будет выбрать кодек, при помощи которого будет производиться сжатие звукового потока.

    "Error mode" - реально, выбрать внутри этой функции ничего не получится. Смысловая нагрузка же этой функции в том, что производится анализ звукового потока на ошибки. Анализ запускается из меню "Video" совместно со сканированием видео.

    Меню Options

    Итак, с работой программы VirtualDub практически разобрались. Теперь осталось разобраться с настройками программы, которые помогут нам сделать работу немного комфортнее.

    "Show log" - показывает в отдельном окошке список работ производимых в VirtualDub. Кому-то может быть и пригодится, но только не мне.

    "Show real-time profiler" - показывает по времени, к каким подсистемам производится обращение, и с какой активностью.

    Сверху, отображается загрузка процессора. Ниже, обращение к устройству чтения-записи. В самом низу отображается работа подсистемы обмена данными.

    Ниже, находятся функции настройки работы VirtualDub по обмену данными с операционной системой и внешними устройствами.

    "Performance" - здесь находятся настройки буферов VirtualDub.

    "AVI Output buffering" - производится настройка размера буфера при чтении AVI файла с винчестера. Его стоит увеличивать только в том случае, когда идут простои процессора по вине источника AVI файла. Ведь источником может быть не только винчестер, но и сеть, внешний винчестер, CD-ROM… Проследить, из-за чего происходят задержки обработки видео модно посредством функции "Show real-time profiler". Если мы видим, что процессор загружен не полностью, а в основном идёт работа с устройством чтения-записи, то можно попробовать увеличить размер буфера "AVI Output buffering". При этом надо учесть, что VirtualDub будет занимать больше места в памяти.

    "Wave input buffering" - позволяет изменять размер буфера для WAV источника. Так как WAV источник у нас задаётся отдельным файлом, для него так же работает отдельная буферизация. Если мы работаем без звука или берём звук из источника видео, то этот буфер использоваться не будет. Резон изменения размера этого буфера точно такой же, как и изменение размера буфера входного видео.

    "Stream data pipelining" - эта функция ограничивает количество потоков, которые будут использоваться при передаче данных. Для выбора этого режима подходит чисто экспериментальный метод. Мы не можем заранее знать, с каким количеством потоков лучшим образом справится ваша система, поэтому только экспериментально. Это зависит от многих факторов: используемого железа, драйверов и конкретных операций, которые производятся в данный момент. При изменении количества потоков, может изменяться полное быстродействие системы.

    В целом, что касается изменения размера буферов, то при какой-то конкретной операции будет оптимален свой размер буфера. Изначально они стоят в каком-то среднем значении, оптимальном для всего сразу. Если же у вас стоит какая-то специфическая задача, то можно подогнать их под свои цели.

    Посмотрим, какие функции есть после выбора размера буферов.

    Что касается опции "Dynamic Compilation" у меня нет никакой информации. А вот на "Preferences" остановимся и рассмотрим все пункты.

    Первая вкладка - "Main".

    "Quick preview defaults" - это поле отвечает за установки, относящиеся к просмотру видео. В него входят 2 опции:

    "Output color depth" - устанавливает, в каком формате цветности будет производиться вывод на экран. 16-bit более быстрый и нет смысла включать 24-bit, на качество видео, выдаваемого кодеку, это никак не влияет. Так же, можно выбрать:

    • Fasted (16-bit) - быстрый режим обсчёта картинки, использует 16 битный режим передачи сигнала.
    • Use output settings - выставляет такой же формат цветности, как у выходящего материала.
    • Match display depth - выставляет такой же формат цветности, как у вашего монитора.
    • 16-bit (HiColor) - выставляет выходным форматом RGB16
    • 24-bit (TrueColor) - выставляет выходным форматом RGB24

    "Process priority" - устанавливает приоритет просчёта картинки выводимой на монитор. Здесь можно оставить значение "Default", что будет соответствовать "Normal".

    "Dub defaults":

    "Process priority" - отвечает за приоритет VirtualDub во время его работы. В целом, во время работы, в окошке "VirtualDub Status" можно выбрать статус работы VirtualDub. Если же поставить приоритет здесь, то он будет постоянен, и не нужно выставлять его каждый раз. Здесь можно выбрать среди 9 значений приоритетов:

    • Default = Normal
    • Idle - самый низкий приоритет VirtualDub. Я предпочитаю именно это значение и вот почему. Кодирование иногда длится сутки и более (в зависимости от кодека, количества и вида фильтров). В это время компьютер может понадобиться для любой другой цели. Если обе задачи будут идти с одинаковыми приоритетами, то работа обеих очень замедлится. Если же, у одной из них будет высокий приоритет, а у второй низкий, то программа с высоким приоритетом отработает и даст спокойно работать программе с низким приоритетом. Так что, пусть VirtualDub спокойно просчитывает видео, а я могу компьютер использовать для своих целей.
    • Далее, по росту приоритетов: Lowest-> Even lower-> Lower-> Normal-> Higher-> Even higher-> Highest при выставлении высоких приоритетов, VirtualDub должен вытеснять другие задачи. По этой причине я не рекомендую применять эти режимы, ведь будет замедленны все реакции, даже при работе с мышью.

    "Automatically add extension to filenames when saving" - при установке этой галочки, во время сохранения файла будет автоматически добавлено расширение. Расширение будет поставлено в соответствии с типом файла, который предполагается для работы.

    Вторая вкладка - "Display". Здесь находятся опции, отвечающие за вывод рабочих окон VirtualDub. "Enable dithering for 16-bit desktops" - производит сглаживание рабочих элементов при работе с 16 битным рабочим столом. Это на любителя.

    "Use DirectX for display panes" - использовать функции DirectX для прорисовки окон VirtualDub. Эту функцию можно держать постоянно включённой. Если у вас видеокарта не полнейший раритет, то всё будет работать нормально.

    "Use DirectX even when Terminal Services is active (may cause display corruption)" - использование ускорения DirectX при выводе выпадающих меню. Эта опция может работать не правильно (выпадающие окна будут пропадать), поэтому сперва убедитесь, что у вас работает всё правильно, а потом оставляйте эту опцию включённой.

    Третья вкладка - "Scene". Это весьма полезная функция. При помощи неё можно находить начала новых сцен или действий (так же, при помощи неё можно отлавливать кадры с сильными помехами). В принципе, она была бы полезна в монтажных программах, для выставления эффектов или подгонки кадров в стык.

    Здесь она так же может пригодиться. На этой вкладке находятся две опции:

    "Interframe (cut)" - уровень разницы между кадрами, при котором считается, что сцена или действие поменялись. Двигая слайдер в сторону "More sensitive" можно добавить чувствительности (в крайнем положении, даже самое небольшое движение в кадре, будет воспринято как смена действия). Движение слайдера в сторону "Less sensitive" уменьшает чувствительность детектора движения, вплоть до его полного отключения.

    "Intraframe (fade)" - эта опция так же относится к детектору смены сцен. Но сцены не всегда сменяются моментально. Иногда, в месте смены сцен делают снижение, а потом нарастание яркости изображения. Эти эффект довольно сложно отследить обычным, пороговым детектором сцен. Для этого был введён этот детектор (Intraframe (fade)). Его чувствительность регулируется так же, как и у предыдущего.

    Четвёртая вкладка - "CPU". Здесь можно выставить оптимизацию кода под конкретный процессор.

    "Use default optimization for current CPU…" - при выборе этой опции включается стандартная оптимизация кода. Она подходит под все виды процессоров, начиная с 486. При выборе этой опции не производится подгонка кода под конкретную модель процессора.

    "Force optimizations" - при выборе этой опции, становится возможно выбрать оптимизацию, в соответствии с вашим процессором.

    • FPU - можно выбирать для любого процессора
    • MMX - его нет только на первых процессорах Pentium и процессорах AMD до эры Athlon.
    • Integer SSE - такого набора команд для процессоров нет, Поэтому остаётся загадкой, для каких именно процессоров предназначена эта опция.
    • SSE - этот набор команд появился в процессорах PentiumIII и Celeron с ядром, сделанным на основе процессора PentiumIII
    • SSE2 - этот набор команд появился в PentiumIV и, соответственно Celeron на ядре PentiumIV
    • 3DNow! - этот набор команд появился в процессорах Athlon и Duron.
    • 3DNow!2 - этот набор команд появился в последних моделях процессоров

    Последняя вкладка - "AVI". Здесь находятся опции, отвечающие за работу с AVI файлами.

    "Restrict legacy AVI support to 1 gigabyte (instead of 2GB)" - при включении этой опции в AVI файл будут прописываться заголовки формата AVI 1.0. При этом, на размер AVI файла будет наложено ограничение в 1 гигабайт. Смысл включения этой опции в том, что некоторые программы не могут работать с AVI формата 2.0. "Do not correct MPEG Layer III audio streams" - Эта опция отключает корректировку MP3 звука в AVI файле. Лично меня очень раздражает, когда при открытии AVI файла с MP3 звуком в VBR формате, VirtualDub навязчиво начинает пытаться его исправить. Естественно, он не умеет правильно работать с VBR и получается сущее безобразие.

    Что ж, продолжим дальше путешествие по меню "Options".

    "Display input video" - при установке этой галочки будет производиться показ входящего видео в окне VirtualDub.

    "Display output video" - при установке этой галочки будет производиться показ видео, уходящего на кодек.

    "Display decompressed output" - это весьма полезная функция, но она очень замедляет работу системы. Смысл её таков, что во время сжатия мы сразу можем просмотреть качество сохранённого видео. То есть, во время сжатия, следом производится разжатие материала и вывод его на экран (в область вывода обработанного материала). Мы можем сразу визуально убедиться, на сколько качественная картинка сохраняется.

    "Show status window" - включение этой опции позволяет появляться окну "VirtualDub Status" во время сжатия материала.

    Это окно очень информативно. В нём выводится практически вся информация о ходе кодирования в VirtualDub.

    "Swap input/output panes" - эта опция меняет между собой окна просмотра входящего и выходящего видео. Иногда, эта опция оказывается весьма полезна. Например, у вас на входе видео весьма большого формата, а вы хотите увидеть, что у вас получится на выходе в результате работы фильтров. Для этого меняем местами окна просмотра и видим всё, что хотели.

    Ну и закончим с панелью "Options".

    "Vertical display" - выставляет окна просмотра входящего и выходящего видео не горизонтально, а вертикально (друг под другом).

    "Sync to audio" - производит синхронизацию видео и звука. Эту функцию не стоит выключать. Дело в том, что при вырезках и вставках, если не будет синхронизации со звуком, то он не будет смещаться и, как результат, полный бардак со звуком. Я бы назвал эту функцию - привязка звука к видео.

    "Drop frames when behind" - включает режим пропуска кадров, если система не успевает показывать просчитываемый кадр. Это распространяется только на вывод изображения на экран и никак не затрагивает обработку изображения.

    "Allow video overlays" - при включении этой опции видео будет выдаваться в оверлей. Оверлей - это область памяти на видеокарте. Все плеера выводят видео именно этим методом. Единственный его недостаток в том, что если при включённом оверлее сделать скриншот экрана или активного окна, то на месте видео будет пустое окно. Но оверлей позволяет быстрее обрабатывать вывод на монитор.

    "Preview field mode" - позволяет определить, с каким видео мы будем работать. Для интерлейсного материала можно задать порядок полей, с которым нужно выводить на экран. Здесь я предпочитаю оставлять "Progressive".

    Панель навигации

    Для передвижения по видеоряду внизу программного окна VirtualDub есть кнопки, помогающие передвигаться по видеоряду.

    При наведении на любую из них появляется подсказка, которая говорит, что делает эта кнопка. Я буду приводить название кнопки исходя из появляющейся подсказки.

    "Stop" - производит остановку режима воспроизведения.

    "Input playback" - производит показ видео, которое открыто в VirtualDub.

    "Output playback" - производит показ видео после обработки в VirtualDub. Под обработкой в VirtualDub подразумевается прохождение видео через фильтры. Когда будете прокручивать видео, обратите внимание, что в VirtualDub есть 2 окна просмотра.

    Если у вас не стоит галочка "Swap input/output panes" в меню "Options", то слева будет показываться оригинальное изображение (Input), а справа изображение после обработки (Output). Для удобства работы, вы можете отмасштабировать окна просмотра под ваше изображение. Для этого, на любом из окон просмотра сделайте щелчок правой кнопкой мыши. У вас появится меню, как показано на левой панели просмотра. Здесь вы можете выбрать масштаб окна из списка предложенных значений (слева) и соотношение сторон выводимого изображения (справа). Мне нравится, что бы во время просмотра было и входное и выходное изображение. Я это подгоняю масштабами. Можно так же и в ручную растянуть окно просмотра. Для этого нужно потянуть его за какой-нибудь край. Но при этом изображение будет деформироваться. Что бы этого не происходило, нужно выставить в выпадающем меню "1:1 pixel ratio (PC)".

    "Start" - переводит слайдер на начало видео.

    "Backward" - переводит слайдер (естественно и видео) на один кадр назад. По моему, пользоваться этой кнопкой довольно не удобно. Гораздо удобнее пользоваться клавиатурой. Клавиша лево выполняет эти же функции.

    "Forward" - передвигает видео на один кадр вперёд. Здесь у меня такие же замечания, что и по предыдущей функции. Клавиша право выполнит ту же самую функцию.

    "End" - передвигает слайдер в конец видео.

    "Key previous" - передвигает слайдер на предыдущий ключевой кадр. Опять же, проще воспользоваться сочетанием клавиш Shift+лево, что будет на много быстрее, чем целится в эту кнопку.

    "Key next" - переводит на следующий ключевой кадр. Особо не останавливаемся и пользуемся клавишами Shift+право.

    "Scene reverse" - по нажатию на эту кнопку производится поиск предыдущей смены сцен. Ранее, я рассказывал о том, как настроить пороги поиска смены сцен.

    Кнопки активизации этой функции находятся только в панели навигации.

    "Scene forward" - производит поиск следующей смены сцен.

    "Mark in" - ставит метку начала выделенной области. Гораздо удобнее использовать клавишу "Home" на клавиатуре.

    "Mark out" - - устанавливает метку окончания выделенной области. Будем пользоваться клавишей "End" на клавиатуре.

    По панели навигации особых замечаний больше нет.

    Теперь, для того, что бы вам было не много понятно, что в этой программе можно делать, приведу примеры работы. Например, у вас есть источник видео (захватили картой захвата с разрешением 720*576) и вам его надо сжать кодеком DivX. Как правило, в форматы Mpeg4 не сжимают полноразмерную картинку. Для начала, нужно подготовить картинку к сжатию, потом уменьшить разрешение видео и отдать кодеку на сжатие. Про подготовку видео и для чего это нужно, я расскажу в статье про фильтры, а сейчас про то, что нужно делать в VirtualDub.

    Что же мы делаем в программе VirtualDub. Открываем видео в VirtualDub. Заходим в окошко добавления фильтров, настраиваем их. В списке фильтров будут те, которые чистят видео от разного рода помех, избавляют от последствий чересстрочной развертки (Deinterlace), и уменьшение разрешения (Resize). Опять же, при выборе разрешения для сжатия, учитываем, что разрешение 720*576 использует не квадратный пиксель, а прямоугольный (для получения стандартного соотношения 4:3). То есть, после того, как мы обрезали края, получилось какое-то новое разрешение. Для сжатия нужно его пропорционально уменьшить (разделить ширину и высоту на одно и то же число). Получились какие-то дробные величины. До целого числа можно округлять не задумываясь. Далее, для того, что бы получить правильные размеры картинки с квадратным пикселем, нужно ширину домножить на 1,0667 и после этого округлить ширину до величины, что бы она делилась на 32, а высота на 16. То, что я написал про разрешения, не панацея, а взято оттого, что разрешение входящей картинки 720*576. Если брать картинку на входе с разрешением 768*576 (некоторые карты позволяют захватывать с таким разрешением), то у него изначально пиксель квадратный и можно только пропорционально уменьшать картинку (не забывая про кратности 32 и 16). Разберём другую задачку. Мы произвели захват с VHS кассеты с разрешением 352*576 (576 -неприкасаемое). Посчитаем, во сколько раз нужно будет увеличивать ширину видео. Для этого, разделим 768/352= 2,1818. Почему мы делим 768? Потому, что для получения нормального соотношения 4:3 при высоте 576 нужно 768. Итак, с разрешениями разобрались. Теперь, в зависимости от приёмов работы фильтры могут быть разные, поэтому перечислять или давать какие-то рекомендации пока я не буду. Далее, мы выбираем кодек, при помощи которого будем сжимать видео и производим его настройку. Если вы собираетесь использовать кодек в двух проходном режиме, то рекомендую при сохранении пользоваться функцией "Don`t run this job now; add it to job control so I can run it in batch mode", о работе которой я уже рассказывал. Пользоваться ей достаточно просто. Через окошко выбора кодека настраиваете кодек на первый проход и сохраняете видео, включив эту функцию. Потом, настраивайте кодек на второй проход и сохраняйте видео, вновь включив эту опцию. Как запустить отложенные задания, я рассказывал. Запускайте отложенные задания и ждите результатов. Имейте ввиду, что при сохранении первого и второго прохода видео должно быть одно и то же. То есть, нельзя добавлять-убирать фильтры или изменять их настройки.

    Как метод работы, можно назвать очистку видео. Дело в том, что в монтажных программах, таких как Adobe Premiere, Pinnacle Edition, Ulead Media Studio… нет фильтров, способных конкурировать с фильтрами VirtualDub по качеству очистки видео от различного рода помех и искажений. Поэтому, если источником видео у вас была видеокассета (формат DV не имеется в виду, хотя и после него можно кое-что почистить), то имеет смысл сначала почистить видео в VirtualDub, а уж потом производить монтажные действия в этих программах. Схема работы в этом случае проста. Загружаем в VirtualDub видео, подлежащее чистке. Настраиваем фильтры, при помощи которых будем чистить видео. Сохраняем видео в каком-либо формате без потерь: RGB uncompressed, Huffiuv, PICVideo MJPEG… Второй кодек предпочтительнее всего. При сохранении учтите, что полученный файл будет занимать огромные размеры (какие конкретно, зависит от разрешения видео, частоты кадров, кодека сжатия видео, наличия/отсутствия звука…). Такие размеры невозможно будет реализовать на файловых системах FAT16 или FAT32 - только NTFS. После сохранения, можно открывать это видео (уже очищенное) в любой монтажной программе и производить все действия по монтажу.

    Возможно, вы не собираетесь делать никакого монтажа, а хотите сжать видео в MPEG2 формат. Тогда, просто подаёте видео на MPEG2 кодек (CCE, Procoder…). Но перед тем, как сжимать в MPEG2 форматы, так же желательно произвести чистку видео (в том случае, когда источник оставляет желать лучшего, а если это не DV материал, то так и будет). Последовательность действий ни сколько не будет отличаться от описанных в предыдущем абзаце.

    Ещё один вариант применения. VirtualDub - самая удачная программа для сжатия в Mpeg4 форматы. В последнее время появились другие, превосходящие по своим характеристикам кодеки, но они пока не получили большого распространения, так VirtualDub отменно работает и с ними. Теперь, допустим, вы делаете какой-то проект в Adobe Premiere и хотите его сжать в MPEG4 формат. Если вы будете это делать из самого Premiere, то столкнётесь с разного рода проблемами: программа по непонятным причинам может вылетать, работа будет происходить очень медленно, для двухпроходного видео придётся отдельно запускать первый и второй проход.

    Для того, что бы избежать этого, мы можем поступить двумя способами.

    • Первый - сохранить из Premiere видео при помощи какого-либо кодека без потерь (перечислял выше), а потом сжать видео в VirtualDub. Плюс - самый быстрый способ. Минус - требуется много места на винчестере.
    • Второй - при помощи фреймсервера передавать данные в VirtualDub, а он уже сделает своё дело. Плюс - не нужно много места на винчестере. Минус - очень медленно работает. Подробнее об этом способе можно прочитать в этой статье
    .

    Для тех, кто владеет скриптовым языком Avisynth, так же не обойтись без VirtualDub. Сам по себе, Avisynth очень гибок и позволяет получить гораздо больше возможностей для редактирования и обработки видео, чем позволяет VirtualDub. Но опять же, Avisynth позволяет только обработать видео, но не позволяет его сохранять. Что бы сохранить видео, обработанное при помощи Avisynth, нам нужно открыть AVS скрипт в VirtualDub, выбрать кодек, при помощи которого будем сохранять и запустить на сохранение. При открытии и сохранении видео из Avisynth скрипта (без какой бы то ни было обработки в VirtualDub), имеет смысл включить режим работы "Fast recompress".

    Итак, применений VirtualDub-у довольно много. Я практически никакой обработки видео не делаю без этой программы.

    На последок, даю ссылки, где можно скачать последние релизы программ VirtualDub и VirtualDubMod:
    VirtualDub в интернете и VirtualDub off-line;
    VirtualDubMod в интернете и VirtualDubMod off-line.

    Оглавление:
  • Меню File
  • Продолжение
  • Меню Edit
  • Меню Video
  • Меню Audio
  • Меню Options
  • Панель навигации

    • Материал взят с сайта 3DNews - Daily Digital Digest - VirtualDub


PcTuner.Ru - VirtualDub v1.9.6

Данный материал взят с стайта PcTuner.ru - Софт и драйверы - Захват и обработка видео - VirtualDub v1.9.6

VirtualDub v1.9.6

Разработчик: Avery Lee
Дата: 20.09.2009-11:40

Особенности: Windows Free

Незаменимая программа для захвата, и особенно для обработки видео. Имеет небольшой размер, простой интерфейс и во-многом уникальные возможности. Также стоит обратить внимание, что программа абсолютно бесплатная!

Интерфейс VirtualDub Интерфейс VirtualDub Интерфейс VirtualDub

Дополнительно доступна 64-х битная версия программы. Она имеет оптимизацию под процессоры AMD Athlon 64, AMD Athlon FX, AMD Opteron, и Intel Xeon EM64T. Для запуска этой версии у вас обязательно должна быть установлена 64-х битная версия Windows. В обычной версии, даже если вы имеете соответствующий процессор, программу запустить не удастся.

Дополнительно:
  • Подборка плагинов для VirtualDub.
  • Руководство по VirtualDub.
  • VirtualDub v1.9.6 (1,520 Mb) - Версия AMD 64-bit

Загрузка:

  • Скачать VirtualDub v1.9.6 (1,371 MB) - 116793 загрузок


PcTuner.Ru - VirtualDub Plug-In

VirtualDub Plug-In

Разработчик: Dmitry Kornev
Дата: 06.05.2008-12:12

Особенности:

Подборка плагинов для VirtualDub, VirtualDubMod, NanDub. Основные условия отбора фильтров для этого списка – это бесплатность, ну и, конечно же, полезность. Список регулярно пополняется.

Деинтерлейс и другие фильтры для работы с полями интерлейсного видео.

  • Asvzzz Deinterlace v2.0 (0,002 Mb). Плагин от Сергея Андыка, эфективно устраняет гребенку, не имеет опций. Аналогичный фильтр встроен в его же программу FlyDS.

  • Smart Deinterlace v2.6b2 (0,011 Mb) - Отличный фильтр для устранения эффекта гребенки, предоставляет возможность изменить параметры фильтрации.

  • Smart Bob v1.1 beta 2 (0,024 Mb) - Этот фильтр действует аналогично Smart Deinterlace, за исключением того, что он удваивает на выходе частоту кадров. Например, если входящее интерлейсое видео имело 25 кадров в секунду, то на выходе прогрессивное видео будет иметь 50 кадров в секунду. Естественно, что плавность воспроизведения от этого возрастает.

  • AlparySoft Deinterlace (0,056 Mb) - По словам разработчиков преимущества Alparysoft фильтра по сравнению с аналогами в следующем. Существующие деинтерлейс фильтры фильтруют весь кадр, то есть те места на кадре, где не было движения, тоже подвергаются обработке. Из-за чего, в этих областях происходит потеря информации и ухудшения качества видео. Фильтр Alparysoft может автоматически определять интерлейсные места кадра и проводить фильтрацию только в этих местах, при этом части кадра, на которых не было движения, остаются высокого качества.

  • Deinterlace-Smooth v1.1 (0,028 Mb) - Фильтр от Gunnar Thalin, генерирует высокое разрешение по вертикали, прогрессивного 50/60fps видео записанного как обычное 25/30fps чересстрочное видео. В стандарте PAL могут существовать 2 типа видео: 50fps видео с половинчатым вертикальным разрешением и 25fps видео с полным вертикальным разрешением. Оба эти типа обычно захватываются как 25fps полноэкранное видео, соответственно для обеспечения 50fps каждый фрейм обычного видео будет состоять из двух кадров записанных черезстрочно. Аналогично и для системы NTSC, только количество кадров там 60/30 соответственно. Этот фильтр предназначен для восстановления разрешения по вертикали для видео с высоким fps.

  • Deinterlace Area Based v1.4 (0,028 Mb) - Деинтерлейс фильтр от Gunnar Thalin, удаляет чередующиеся линии только в тех местах, где они видны. Анализируется каждый кадр в отдельности, и за счет деинтерлейс обработки только там, где она требуется, достигается высокое качество итогового видео. Не обработанные места имеют исходное качество, и исходную прорисовку. Там где требуется деинтерлейс обработка, происходит как обычно смешивание полей или интерполяция.

  • Deinterlace MAP (Motion and Area Pixel) v1.0 (0,018 Mb) - Деинтерлейс фильтр от Shaun Faulds, базируется на двух других разработках. Во-первых, он использует код фильтра Deinterlace Area Based, поэтому анализирует каждый кадр и обрабатывает только те участки изображения, где произошло движение и наблюдается гребенка. Во-вторых, фильтр использует для обработки таких участков код и алгоритм лучшего деинтерлейс фильтра Smart Deinterlace.

  • Deinterlace PAL movie v1.1 (0,020 Mb) - Фильтр от Gunnar Thalin, исправляет видео, которое должно быть прогрессивным (без гребенки), но, тем не менее, содержит интерлейсные линии.

  • Deinterlace PAL Interpolation v1.0b1 (0,032 Mb) - Фильтр от tHE fISH, исправляет видео, которое должно быть прогрессивным (без гребенки), но, тем не менее, содержит интерлейсные линии. В отличие от предыдущего фильтра, здесь на выходе осуществляется дополнительная проверка и если линии все же остались, осуществляется их устранение методом интерполяции.

  • Deinterlacer - Auto PAL movie v3.4b1 (0,122 Mb) - Фильтр от Simon Walters, автоматически восстанавливает порядок чередования полей для интерлейсного PAL видео. Этот фильтр для всех, кто когда-нибудь пытался восстанавливать оригинальный порядок полей и имел проблему с порядком их чередования. После обработки этим фильтром, видео можно будет рассматривать как прогрессивное. Это означает, что вы можете выключить интерлейс обработку в MPEG-2 кодеке, что должно отразиться на меньшем количестве артефактов вследствие более эффективного сжатия.

  • Dynamic Field Order Correction v1.0 (0,030 Mb) - Фильтр от Shaun Faulds, пытается максимально возможно восстановить интерлейсное видео в прогрессивный видеопоток. Алгоритм обработки построен таким образом, что фильтр должен восстановить даже перепутанные поля, динамически изменяющиеся по ходу отображения видео. Фильтр берет вначале верхнее поле текущего фрейма и сравнивает его, используя алгоритм обнаружения гребенки, с нижним полем этого же фрейма, потом с полем предшествующего и следующего фреймов видео. После чего анализирует результат и решает, какая комбинация лучше подходит. Обработка последующих фреймов происходит аналогичным образом.

  • Field Delay v1.0 (0,097 Mb) - Фильтр от Uwe Freese, позволяет задать, какие из полей интерлейсного видео будет идти первыми, четные или нечетные. Иногда при обработке интерлейсного видео из-за ошибки, или сбоя источников видео, можно столкнуться с ситуацией, что поля идут не в своей последовательности и как следствие, видео начинает, как бы подергиваться. Этот фильтр позволит это исправить. Посмотрите содержащуюся в архиве справку и особенно рисунки, будет понятнее.

  • Field Shift v1.0 (0,020 Mb) - Фильтр от Gunnar Thalin. Если Вы используете программу VirtualDub для видео сжатого MJPEG кодеком с разделением каждого фрейма на два подфрейма для удвоения частоты кадров (50fps или 60fps), вы, возможно, обратили внимание, что полученное видео перепрыгивает немного вверх и вниз. Что бы устранить этот дефект, каждый второй фрейм должен быть перемещен на одну линию вниз, данный фильтр позволяет это сделать, а, кроме того, позволяет удвоить разрешение видео по высоте.

Шумоподавление, сглаживание и резкость.

  • Vlafy NvDenoise Filter (0,162 Mb) - Фильтр пространственного шумоподавления. Включает два алгоритма — K-Nearest Neighbors Filter и Quick Non Local Means Filter. Позволяет быстро и эффективно понизить уровень шумов без существенной потери чёткости изображения. Поддерживается работа с интерлейсным видео. Для работы фильтра необходима видеокарта nVidia GeForce серии 8ххх (GF8400GS и выше). Полный список поддерживаемых видео- и специализированных карт можно посмотреть здесь.

  • Dynamic noise reduction (0,056 Mb) - В архиве 3 варанта фильтра от Steven Don, предназначены для устранения динамического шума. Фильтры имеют настройку в виде ползунка, таким образом, в зависимости от зашумленности вашего видео можно подстроить необходимый уровень фильтрации. Однако стоит учесть, что при излишне высоких значениях теряется динамика и самого видеоизображения. Просто включите на просмотр открытое в VirtualDub видео и подстраивайте до необходимого значения, результат можно видеть сразу. Применяя данный фильтр можно существенно повысить степень сжатия видео, не говоря уже о более очевидной вещи, как собственно фильтрация динамического шума.

  • Video DeNoise (0,018 Mb) - Фильтр для очистки видеоизображений от шума. Анализирует каждый кадр независимо от других, благодаря чему не вносит дополнительные искажения по сравнению с динамическими фильтрами (практически не происходит потеря четкости по сравнению с операцией blur), а в совокупности с высокой точностью определения шумов данный фильтр, вероятно, является лидером среди подобных фильтров для VirtualDub. Полезен при кодировании в MPEG4, т.к. даже после удаления незначительного шума размер кодируемого файла уменьшается. Избавляет от интерлесинга (эффекта "лесенки" или "расчески").

  • MSU Denoising Filter (0,032 Mb) - Фильтр применяется для обработки зашумлённого видеопотока, для повышения качества видео, либо для улучшения и облегчения последующей обработки, например, перед сжатием или выполнением деинтерлейсинга. Подробный обзор фильтра и описание настроек здесь.

  • 2d Comb Filter (0,032 Mb) - Устраняет мерцание линий. Честно говоря, не увидел заметного эффекта при использовании данного фильтра, может кто-то подскажет, в каких случаях он будет полезен ?

  • Chroma Noise Reduction v1.1 (0,035 Mb) - Фильтр от Gilles Mouchard, уменьшает шум в сигналах UV, не изменяя сигнала Y. Полезен для записей записанных с VHS носителей. Напомню, что существует несколько способов представления цвета, наиболее распространенная на компьютере - RGB. В то время как на телевидении, VHS рекордерах, MPEG, и тд. широко используется система YUV. В обозначении YUV: Y (luminancy) - интенсивность яркости, U (chrominancy1) и V (chrominancy2) - информация о степени яркости и насыщенности изображения. Так уж принято, что на магнитных VHS лентах, по ширине зарезервированное место под UV сигналы меньше, чем под Y сигнал, поскольку человеческий глаз значительно менее чувствителен к яркости, чем цвету. Как следствие, часть ленты, содержащая UV сигналы больше подвержена износу. Этот фильтр позволяет уменьшить шум UV сигналов, не оказывая влияния на Y сигнал, который обычно имеет и без того хорошее качество.

  • MSU Deblocking Filter (0,063 Mb) - Фильтр предназначен для восстановления качества видео, взятого с DVD (например, когда туда записано 4 часа видео с низким битрейтом), VideoCD или после видеокодеков H.261, H.263, DivX 3, DivX 4, XviD. Фильтр автоматически определяет уровень блочности кадра и конкретной части кадра, сохраняя максимум деталей. Так, в одном и том же фильме на сцене с медленным движением (практически без блочности) фильтр будет действовать минимально, а на сценах с сильным движением - будет работать в полную силу. Основным достоинством фильтра является то, что он поднимает интегральное качество в наиболее распространенной PSNR метрике по сравнению с оригинальным фильмом! Т.е. фильм после декомпрессии при сравнении с оригиналом показывает меньшее качество, чем фильм после декомпрессии и деблокинга. Подробный обзор фильтра и описание настроек здесь.

  • MSU Smart Sharpen Filter (0,032 Mb) - Фильтр позволяет увеличивать резкость изображения с минимальным увеличением шума. Подробный обзор фильтра и описание настроек здесь.

  • MSU Deflicker Filter (0,029 Mb) - Фильтр подавления мерцания видео (постоянное резкое изменение яркости кадров). Данный артефакт часто встречается в старых фильмах с хроникой. Фильтр будет очень полезен людям, занимающимся восстановлением видео. Подробный обзор фильтра и описание настроек здесь.

  • Deflicker Filter v.1.1 from Donald Graft (0,006 Mb) - Фильтр выравнивает резкие фреймовые изменения яркости (мерцание видео).

  • 2D Cleaner Filter (0,024 Mb) - Фильтр заменяет каждый пиксель видеоизображения среднерассчитанным значением соседних пикселей. Задается радиус учета соседних пикселей (0-10) и интенсивность (0-255). Можно включить опцию учитывающую, что обрабатываемое видео интрлейсное. Так же можно повысить резкость резких переходов на изображении "show sharp edges".

  • Area Smoother v0.1 from Daniel Vollmer (0,041 Mb) - Фильтр анализирует каждый кадр в отдельности и заменяет более-менее одинаково окрашенные области их усредненным значением цвета. В архиве сразу исходник.

  • Deshaker v1.6 (0,033 Mb) - Фильтр от Gunnar Thalin, представляет собой видеостабилизатор для VirtualDub. Позволяет устранить резкие рывки сделанные камерой при съемке. Может стабилизировать движения горизонтальном и вертикальном направлениях, а так же вращение и приближение. Для достижения наилучшего результата позволяет производить обработку в 2 прохода. Может использовать предшествующие и следующие кадры для заполнения утерянных фрагментов вызванных рывком камеры. Возможность самостоятельного покадрового управления. Кроме того масса установочных параметров для опытных пользователей.

  • Exorcist v1.0 (0,021 Mb) - Фильтр от Chris Wojdon, разработан для того что бы удалить эффект отраженного ТВ сигнала, на экране это проявляется в виде теней основных объектов. Позволяет сгладить тени и отражения объектов. Настройки фильтра позволяют подстроиться под конкретно вашу ситуацию, настроить сдвиг тени.

  • Coring v1.0 (0,020 Mb) - Фильтр от Paul Currie. Реализованы основные функции coring-а. Это процесс, где интенсивность пикселей сравнивается с пороговым значением (0-64) и они окрашиваются в абсолютно черное если значение ниже порогового. Что приводит к сокращению шумов в черных областях изображения, и реализовано во многих цифровых видеокамерах и чипах сбора данных (например линейка BT848).

    Параметры:
    - Threshold: Любому пикселю с интенсивностью ниже этого значения присваивается значение coring-а (обычно черный).
    - Core to threshold: Иногда coring приводит к резкому перепаду от темно-серого к черному, который может быть очень заметен. Этот эффект должен исчезнуть, если пиксели окрашивать не чисто в абсолютно черное, но и темно-серое.

    Опции предпросмотра:
    Облегчают выбор порогового значения, хорошо выделяя затрагиваемые пиксели.
    - Core to green: Временная установка значения coring-а в зеленый.
    - Brightness slider: Слайдер коррекции яркости для препросмотра.

Эффекты, цветокоррекция.

  • MSU OldCinema Filter v1.2 (0,043 Mb) - Фильтр предназначен для получения эффекта "старого кино". Для этого имеется возможность настройки цветовой гаммы старения пленки, а также набор артефактов для достижения большей реалистичности и придания ему вида "хроники". Подробный обзор фильтра и описание настроек здесь.

  • MSU Noise Generation Filter (0,028 Mb) - Фильтр позволяет добавлять в видеопоток искусственно сгенерированный шум: белый шум, розовый шум, цветные пятна. Подробный обзор фильтра и описание настроек здесь.

  • Bit Drop Filter v0.9beta from Simon Walters (0,028 Mb) - Очень простой фильтр. Позволяет уменьшить воспринимаемую битовую глубину видеоклипа. Вы можете произвольно любой бит (1-8) выставить на 1 или 0. По словам автора, получаемый при этом эффект напоминает видеоэффекты 1970-х годов.

  • Border Control Filter v2.35 from Simon Walters (0,021 Mb) - Позволяет добавить в видео бордюры. Раздельная настройка с любой стороны (слева, справа, сверху, снизу). Размер видеоизображения не меняется, бордюры накладываются внутрь на изображение с любой из сторон. Есть 4 варианта: просто закраска необходимым цветом, плавное затенение к краю, размытие (размазывание) и растяжка.

  • Border Smear Filter v1.0beta from Simon Walters (0,022 Mb) - Фильтр позволят добавить черные бордюры сверху и снизу видеоизображение. Размер изображения при этом не меняется, добавление происходит вовнутрь. Кроме простых черных, бордюры могут размазывать изображение, и плавно затеняться к краям.

  • ACDSee Filter Auto Levels (0,022 Mb) - Полностью автоматизирует процесс подстройки уровней яркости/контраста/цветности изображения. Фильтр постоянно анализирует видеоизображение и подстраивает уровни динамически. Фильтр не имеет настроек. Базируется на функции "Auto Levels" программы ACD Photo Enhancer, входящей в комплект ACDsee, отсюда и название фильтра.

  • Brightness/Contrast (UI Enhanced) v1.0 (0,017 Mb) - Фильтр от Donald Graft, позволяет плавно подстроить якость ± 100% и контрастность 0-200%.

  • Colours Brightness Contrast Gamma (0,033 Mb) - Фильтр от Alessandro Malanca, предназначен для плавной регулировки яркости, контрастности и гаммы. При изменении параметров отображает сразу RGB или общую гистограмму.

  • Color Equalizer v1.1 (0,025 Mb) - Фильтр от Tamбs B. Bakу, предназначен для раздельной регулировки цветов RGB. Старые видеокамеры иногда имеют неправильный цветной баланс, который проявляется в виде несколько окрашенных видеозаписей. Картинка иногда немного голубоватая, иногда имеет розовый оттенок и тд. Этот эффект легко можно исправить данным фильтром.

  • Colorize v1.1beta1 (0,028 Mb) - Фильтр от Donald Graft, Позволяет окрасить видео в выбранный цветовой оттенок, другие цвета убираются полностью. Получается как бы монохромное видео, основанное на выбранном цвете. Можно использовать, например, что бы придать вид старой кинопленки с коричневым оттенком.

Изменение размера видеоизображения.

  • 2:1 Vertical Reduction (0,026 Mb) - Просто уменьшает размер видеоизображения по вертикали в 2 раза.

Добавление/удаление логотипов, надписей, бегущих строк и тд.

  • MSU Subtitle&Logo Remover (0,041 Mb) - Фильтр предназначен для удаления субтитров и логотипов с видеоизображения. Реализованно полностью АВТОМАТИЧЕСКОЕ определение области логотипа, даже если логотип смещается в разных сценах. В фильтре используется компенсация движения для правильного заполнения области лого (эффект "наползания" объектов на логотип/субтитры для восстановления изображения). Подробный обзор фильтра и описание настроек здесь.

  • DeLogo v1.3.2 (0,318 Mb) - Фильтр от Karel Suhajda, предназначен для удаления логотипов с видеоизображения. Для удаления логотипа этим фильтром необходимо сохранить один из кадров видео с логотипом, открыть его в любом графическом редакторе, закрасить область с логотипом красным цветом, сохранить изображение и использовать его потом в качестве маски для удаления логотипа. В архиве с программой содержится мануал с рисунками, где все доступно и понятно показано.

  • Add Frame Numbers (0,093 Mb) - Достаточно продвинутый фильтр с множеством настроек для добавления в видео счетчика кадров, времени видео, и текущего времени. Настраиваемые начальные значения для отсчета, а так же интервалы времени. Позволяет выводить несколько счетчиков. Полностью настраиваемое расположение, шрифты, цвет и тд.

  • Alidator Filter (0,015 Mb) - Простейший фильтр, просто добавляет внизу видеоизображения текущую дату и время в формате "dd.mm.yyyy hh:mm:ss". Настроек не имеет. Ресурсов практически не требует, поэтому будет особенно полезен при захвате видео.

Фильтры для испытательных целей.

  • Dct-q-idct v1.1 (0,040 Mb) - Фильтр от Andreas Dittrich, написанный для испытательных целей. Накладывает прямо поверх видео статическую информацию о текущем видео. Информация динамически изменяется. Фильтр выводит следующую информацию: color subsampling, blockwise forward DCT, matrix based quantization, source coding, inverse-DCT (IDCT), color upsampling. Вы можете использовать любые матрицы квантования и немедленно видеть информацию о вашем видео. Тем самым вы можете проверить, например, эффективность применения и настроек других фильтров, включенных вами в VirtualDub и повысить по возможности коэффициент сжатия. Статическая информация может быть сохранена в фале.

Впомогательные фильтры.

  • Filter Blender v1.1 (0,020 Mb) - Вспомогательный фильтр для VirtualDub от Steven Don. Как известно VirtualDub имеет одно окно для назначения плагинов в одном порядке, соответственно вы можете создать лишь одну последовательность фильтров для обработки видео. Данный фильтр позволяет разделить эту последовательность на две ветки, которые будут обрабатываться одновременно, а потом снова собрать их в одну, таким образом, сложив результаты обработки. Фильтр имеет 3 опции: Begin Path 1, Begin Path 2 и Blend. Последняя опция в качестве дополнения позволяет задать % соотношение при смешивании двух веток.

  • Conditional v0.5b (0,461 Mb) - Фильтр от Dmitri Schamschurko, позволяет применить другой фильтр в зависимости от заданного условия.


PcTuner.Ru - VirtualDub - описания фильтров

VirtualDub - описания фильтров

Автор: Dmitry Kornev
Дата: 24.01.2002-07:20

Описание работы стандартных (встроенных) фильтров VirtualDub. Сразу скажу, что дополнительные фильтры можно найти здесь.

  • 2:1 reduction (high quality) - Уменьшает размер изображение по горизонтали и по вертикали ровно в 2 раза.

  • 3x3 average - Обрабатывает изображение, путем заменены каждого пикселя картинки на некоторый "средний пиксель", который получен после анализа соседних пикселей. :)

  • Blur и Blur more - В разной степени размывают изображение.

  • Box blur - Настраиваемый фильтр размытия изображение. В настройках есть кнопка "Show preview", нажав которую можно сразу видеть результат работы фильтра.

  • Brightness/Contrast - Позволяет изменить яркость и контрастность изображения.

  • Deinterlace - Встроенный фильтр для устранения "гребенки". Честно говоря результат его работы мне не понравился, лучше пользоваться внешним фильтром "Smart deinterlace".

  • Emboss - В Adobe Photoshop этот эффект называется "рельеф". Трудно на словах объяснить, что он делает, проще показать. :)

  • Flip horizontally - Перевернуть изображение по горизонтали.

  • Flip vertically - Перевернуть изображение по вертикали.

  • Grayscale - Делает изображение черно-белым.

  • Invert - Инвертирует цвета.

  • Levels - Фильтр позволяет корректировать уровень освещенности изображения. Предлагается, передвижением ползунков, выставить значение для самых темных/светлых пикселей, а так же некое среднее значение. Нажмите кнопку "Show Preview" что бы сразу следить за результатом работы фильтра. Так же, периодически, нажимайте кнопку "Sample frame", чтобы видеть гистограмму, по ней проще сориентироваться и проще выставить ползунки.

  • Motion blur - Размывает движения. Переместившиеся объекты исчезают несразу.

  • Null transform - Дословно : нулевая трансформация, т.е. сам по себе этот фильтр ничего не делает. Обычно он выбирается для подрезания неровных краев.

  • Resize - Позволяет изменить размер картинки. Задайте новые размеры ширины и высоты. В списке "Filter mode" я обычно выбираю "Precise bicubic (A=-1.0)", можете поэкспериментировать и выбрать что-то на свой вкус. Нажмите кнопку "Show Preview" что бы следить за происходящим.

  • Rotate - Поворачивает картинку на 90, 180 или 270 градусов.

  • Rotate2 - Этот фильтр представляет более широкие возможности поворота картинки, здесь угол поворота, вы вписываете сами.

  • Sharpen - Увеличивает контраст между сливающимися элементами в изображении, если попроще : увеличивает резкость изображения. :)

  • Smoother - Размывает картинку. Фильтр позволяет задать степень размытия.

  • Temporal smoother - Размывает картинку по времени. :) Фильтр чем-то похож на "Motion blur", но эффект несколько другой.

  • Threshold - Преобразует изображение в черно-белое (оттенки серого отсутствуют полностью).


PcTuner.Ru - VirtualDub - первые шаги

VirtualDub - первые шаги

Автор: Dmitry Kornev
Дата: 24.01.2002-18:54

VirtualDub - совсем не большая программа, всего 800 кб, представляет собой незаменимый инструмент при захвате и особенно при обработке видео.

Данное описание поможет вам разобраться в особенностях работы с данной программой. Оно не претендует на полноту, но тем не менее описывает основные, наиболее часто используемые, приемы работы.

  • Захват видео в VirtualDub
  • Обработка видео - вырезание ненужных фрагментов.
  • Обработка видео - варианты сохранения AVI.
  • Обработка видео - обработка изображения фильтрами.
  • Полезные советы по работе с VirtualDub.

Захват видео в VirtualDub

VirtualDub запущен, переходим в режим захвата видео.

По умолчанию файл в который будет производиться захват расположен на диске C: и называется Capture.avi, при необходимости это можно изменить.

Выбираем источник видео сигнала.

Я выбираю "Видеотюнер", тут же можно настроить яркость, контраст, насыщенность, ... , для этого необходимо выбрать закладку "параметры устройства". Если у вас эти параметры не доступны для регулировок - в этом виноват WDM драйвер, попробуйте поставить другой (я предпочитаю драйвер от Eduardo Jose Tagle).

Выбираем формат, в который будем производить захват.

При захвате под Windows2000/XP, используя WDM драйвер - максимальное разрешение, с которым можно захватить видео программой написанной под VideoForWindows (а VirtualDub именно такой и является), равно 352x288. Правда есть небольшое исключение, о котором я узнал совсем недавно: если использовать WDM драйвер от Eduardo Jose Tagle, то даже VideoForWindows программами можно захватить видео с высоким разрешением. Как такое возможно - не знаю, но факт остается фактом. :)

И так выбираем разрешением и глубину цвета. Глубину цвета, как уже говорилось, лучше выбирать YUY2.

Выбираем формат звука и количество кадров в секунду.

Чаще всего следует выбирать следующим образом, см. ниже.

По умолчанию, звук записывается без сжатия. На всякий случай можно зайти и убедиться, что все так и есть.

Должно быть выбрано "PCM", убедитесь, что все в порядке. Выбирать какой-то кодек для звука настоятельно не рекомендую, поскольку в этом случае звук обязательно разойдется с видео потоком.

Выбираем кодек для видео потока. Рекомендации по выбору и настройке кодека, можно найти в других статьях, здесь я на этом останавливаться не буду.

Необходимо выставить очень важную настройку, привязку видео потока к звуку. Возможно, опция уже выбрана, на всякий случай убедимся. Для этого заходим в настройки.

И смотрим, если нет, ставим пометку, против "Lock video stream to audio".

При желании можно подрезать неровные края. Для этого необходимо поставить галочку против "Enable" и зайти в "Set bounds ...", что бы выставить размеры обрезаемых полей.

Выставляя поля можно сразу видеть результат - это очень удобно.

Если позволяет производительность компьютера и есть желание можно, при захвате, наложить фильтры.

Теперь все готово и можно переходить непосредственно к захвату видео :

Кнопка F6 - начать захват.

Esc - прервать захват.

В ходе захвата можно видеть всю необходимую статистику.

Обработка видео в VirtualDub - вырезание ненужных фрагментов.

Допустим вы захватили с эфира какой-нибудь фильм, и пока этот фильм шел, раз десять вставляли различную рекламу, теперь требуется вырезать эту рекламу. Делается это очень просто.

Открываем файл в VirtualDub.

Находим кадр с которого начинается реклама. Искать саму рекламу быстрее и удобнее всего, претаскиванием бегунка, мышиным курсором.

Реклама найдена, теперь необходимо остановиться на кадре, с которого она начинается. Для этого удобно пользоваться клавишами со стрелками на клавиатуре [<] и [>] - переход на предыдущий и следующий кадр. Попробуйте также перемещаться стрелками с клавиатуры в сочитании с клавишами [Alt] или [Shift]. Тоже самое можно делать, нажимая кнопки на экране.

Теперь, кадр с которого начинается реклама найден, нажимаем на клавиатуре кнопку [Home], таким образом мы пометили начало удаляемого фрагмента. Тем же образом ищем конец рекламы, находим последний кадр рекламы - нажимаем [End]. Фрагмент выделен, что бы его удалить нажимаем [Delete]. Все, фрагмент удален !

Тоже самое можно делать нажимая кнопки на экране.

Что бы изменения вступили в силу необходимо сохранить AVI файл. Различные способы сохранения мы рассмотрим дальше.

Обработка видео в VirtualDub - варианты сохранения AVI.

При сохранении AVI файла необходимо определиться, что вы хотите получить в итоге, и в соответствии с этим сделать некоторые настройки. Возможно сохранение следующим образом :

  • Переработка, сжатие, аудио и видео потоков.
  • Переработка, сжатие, только видео потока - звук остается неизменным.
  • Переработка, сжатие, только аудио потока - видео остается неизменным.

Выставляем настройки для видео потока.

Если требуется сжать заново видео поток, возможно более компактным кодеком. Или обработать поток фильтрами, а затем так же его сжать - необходимо выбирать "Full processing mode".

Для звука все аналогично.

Выбрав "Full processing mode", убедитесь что, верно, выставлен и настроен аудио кодек.

Когда все настроено - сохраняем AVI.

Еще несколько моментов.

Можно сохранить видео совсем без звука. Для этого, соответственно, необходимо выбрать :

Можно и на оборот, сохранить только звук (в WAV файл). Это может понадобиться, например, для обработки звука в более продвинутом аудио редакторе. Мне приходилось вытаскивать, таким образом, звук, что бы обработает его фильтрами в CoolEdit.

Для этого, не требуется делать каких то специфических настроек. Просто открываем AVI файл в VirtualDub и сразу :

Что бы присоединить звук обратно к видео, делаем так: AVI файл должен быть уже открыт в VirtualDub, выбираем файл со звуком :

Теперь, если неободимо, просто сохранить все как есть, без всякой обработки - выбираем для видео и аудио потоков "Direct stream copy" и сохраняем AVI.

О том, когда не требуется полная переработка видео или звука.

Видео поток можно не пережимать, а просто выбрать "Direct stream copy" в случае, если вы лишь вырезали ненужные фрагменты. Фильтры при этом не накладывались.

Учтите только, что при этом вырез осуществляется по ключевым кадрам. И если у вас видео пожато с большими промежутками между ключевыми кадрами то, возможно, вы получите не совсем то, что хотели. Т.к. выбранные вами кадры для начала и конца выреза могут не совпадать с ключевыми. Это относиться в частности к видео потоку, сжатому в MPEG4.

Обработка видео в VirtualDub - обработка изображения фильтрами.

Обработка видео фильтрами может производиться непосредственно при захвате, но большинство фильтров, очень требовательны к ресурсам и поэтому мало пригодны для обработки в реальном времени. Поэтому чаще всего фильтрами приходится обрабатывать уже захваченное видео. Именно этот случай мы и рассмотрим подробно.

VirtualDub запущен и AVI файл, требующий обработки открыт. Переходим к выбору фильтров.

В открывшемся окне список сначала пустой, для добавления в него фильтра, нажимаем кнопку "Add ...".

Изначально программа VirtualDub уже содержит в себе некоторое количество фильтров, они встроены и в списке значатся как "Internal". Но встроенных фильтров часто бывает недостаточно. Так, например для того, что бы убрать "гребенку" лучше пользоваться внешним фильтром. Внешние фильтры скачиваются из интернета дополнительно.

Непосредственно сам фильтр (внешний) представляет собой файл с расширением .vdf , что бы подключить такой фильтр к VirtualDub необходимо просто поместить его в каталог "VirtualDubPlugins".

И так, выбрав один из фильтров, нажимаем "ОК".

Таким образом, мы выбираем необходимое количество фильтров, обязательно производим их настройку. Настроить фильтр можно, нажав кнопку "Configure ...".

Обязательно учтите, что в каком порядке расположены фильтры в этом списке, в том порядке они и будут накладываться на изображение. При необходимости можно двигать фильтры вверх или вниз - кнопки соответственно "Move Up" и Move Down".

Выбрав и настроив необходимые фильтры - нажимаем "ОК" и возвращаемся к нашему AVI файлу. Теперь мы можем видеть полученный результат.

Размеры кадров часто бывают очень большими, что даже не помещаются на экране монитора, как в выше приведенном примере. В этом случае, можно поменять местами исходный и полученный кадры. Т.е. при смене, слева мы будем полностью видеть кадр - результат, а исходный кадр, справа - уже что поместиться.

Теперь, что бы все эти фильтры окончательно наложить на исходный AVI файл его необходимо сохранить. Но предварительно обязательно убедиться, что для видео потока выбран "Full processing mode".

Собственно сохранение.

Полезные советы по работе с VirtualDub.

Совет 01 - Сохраняйте настройки обработки видео.

VirtualDub позволяет полностью сохранить настройки обработки видео (Меню "File" - "Save/Load Processing Settings..."). При этом сохраняется все : настройки и последовательность наложенных фильтров, вырезанные фрагменты, настройки кодеков, и т.д. Очень полезно, если часто приходиться обрабатывать однотипные видео файлы, или просто, часто приходится накладывать одну и ту же последовательность фильтров...

Совет 02 - Горячие клавиши перемещения по видео.

Очень удобно при движении по видео пользоваться следующими горячими клавишами :
[Shift] + стрелки [<] и [>] - предыдущий и следующий ключевой кадр (для перемещения по видео сжатому в MPEG4).
[Alt] + стрелки [<] и [>] - 50 кадров назад и вперед, соответственно (для перемещения по видео сжатому в MJPEG, Nuffyuv, ... т.к. здесь каждый кадр является ключевым).

Совет 03 - Комфортное MPEG4 кодирование в два прохода.

Когда все настройки VirtualDub и кодеков сжатия выставлены, и настало время производить первый проход сжатия в MPEG4, удобнее поступить следующим образом:

  • (уточняю) в настройках DivX кодека выбран первый проход.
  • Сохраняем, меню "File" - "Save as AVI ...", задаем имя и расположение AVI файла, а так же ставим галочку напротив "Don't run this job now...". Теперь жмем кнопку "Сохранить".
  • Заходим в настройки DivX кодека, выбираем второй проход. Напомню, что больше ничего менять нельзя!
  • Снова, меню "File" - "Save as AVI ...", задаем имя и расположение AVI файла (имя другое), а так же ставим галочку напротив "Don't run this job now...". Жмем кнопку "Сохранить".
  • Теперь, меню "File" - "Job control...". В открывшимся окне мы видим два назначенных нами задания (первый и второй проходы), жмем "Start".

По завершению первого прохода сжатия, VirtualDub сразу начнет выполнять второй проход. Согласитесь, это очень удобно...


PcTuner.Ru - Описания работы с софтом

Описания работы с софтом

Показано 3 публикаций
Заголовок Дата

VirtualDub - первые шаги

Описание работы в VirtualDub. Оцените огромные возможности этой небольшой программки, сделав первый шаг, вы уже не сможете отказаться от ее использования.
 24.01.2002

VirtualDub - описания фильтров

Описание работы стандартных фильтров VirtualDub
 24.01.2002

VirtualDub - соединяем несколько AVI файлов

Наверно многие сталкивались со сложностями соединения в программе VirtualDub несколько видеофайлов в один, данная статья подробно описывает возможные способы работы и решения возможных проблем.
 24.01.2002


PcTuner.Ru - VirtualDub - соединяем несколько AVI файлов

VirtualDub - соединяем несколько AVI файлов

Автор: Дмитрий Корнев
Дата: 24.01.2002-07:19

Соединять в один несколько AVI файлов, не такое простое дело, как может показаться по началу. Дело в том, что чаще всего отдельные фрагменты, имеют разный FPS, и именно по этой причине VirtualDub отказывается их соединять.

Разный FPS, другими словами разное количество кадров в секунду, могло получиться из-за того, что при захвате видео вы делали привязку видео потока к звуку, во избежание рассинхронизации видео и звука. Что же теперь делать, спросите вы...

Самый простой и верный способ избежать таких проблем - это захватывать видео не кусками, а все сразу. Тем более, что вы уже знаете, как создавать большие по продолжительности и по объему AVI файлы, и знаете, что особых проблем при этом нет.

Второй способ избежать проблем при склеивании файлов - это не делать привязки видео потока к звуку при захвате. Естественно, при этом вы рискуете получить рассинхронизацию, поэтому данное решение малопригодно.

Теперь я вас предупредил, что лучше так не делать и рассказал о том, как можно этого избежать. :) Поэтому переходим, непосредственно, к способу соединения...

1. Идеальный вариант - AVI файлы имеют одинаковый FPS.

Открываем в VirtualDub первый фрагмент, с которого в дальнейшем начнется будущий ролик.

Присоединяем, к уже открытому фрагменту, следующий, для этого выбираем команду:

Выбираем файл. Открытый, таким образом, файл будет присоединен в конец предыдущего.

Последующие фрагменты присоединяются так же. Как вы уже поняли, фрагменты необходимо присоединять именно в той последовательности, в которой они потом будут идти в конечном ролике.

Все фрагменты открыты, теперь, при желании вы можете производить любые манипуляции, перед тем как перейти к сохранению. Можете накладывать фильтры, вырезать не нужные куски и т.д.

Сохранить тоже можно по разному, можно с пережатием и без пережатия видео и аудио потоков.

В общем, не буду повторяться - вы все это знаете из предыдущих описаний...

2. Не идеальный вариант - AVI файлы имеют различный FPS.

Мы имеем некоторое количество видео фрагментов, которые в свою очередь имеют различный FPS. Сразу склеить их, при помощи VirtualDub, нам не удастся. Поэтому для начала все имеющиеся фрагменты необходимо привести к одному FPS, и это совсем не простая задача!

Меняя частоту кадров AVI, мы ускоряем или замедляем поток кадров, следовательно, меняем продолжительность AVI. Но при этом звуковая дорожка остается неизменной, VirtualDub не сопоставляет ее видео потоку! Поэтому, неизбежно получается рассинхронизация видео и аудио потоков.

Выясним FPS фрагментов, которые нужно соединить. Для этого, поочередно, каждый файл открываем в VirtualDub, в меню "Video" выбираем :

В открывшемся окне видим FPS текущего файла:

Запоминем или лучше записываем значение FPS. Открываем следующий AVI файли таким же образом выясняем его FPS, и т.д.

  • Если вы видите, что FPS всех файлов меняется незначительно - рассчитайте или приблизительно оцените их среднее значение. Потом частоту кадров будете приводить к этому среднему значению. Это важно, т.к. при этом FPS для большинства фрагментов будет меняться незначительно и, следовательно, меньше будет рассинхронизация.

  • Если из всех имеющихся фрагментов всего один или несколько имеют значительно отличающееся значение FPS - обрабатывайте их по отдельности. Т.е. этот один или несколько фрагментов пока не трогайте, возьмите те, что похожи, рассчитайте и приведите их к среднему FPS. Оставшиеся приведите к этому же среднему FPS другим способом, об этом дальше.

  • Если у всех файлов разбег FPS значительный их так же следует приводить к среднему значению, но по-другому.

2.1. Приведение AVI файлов к одному FPS (разбег не значительный).

Обычно, если видео фрагменты захватывались с одного и того же источника, то FPS у них изменяется весьма не значительно. Кроме того, чем фрагменты меньше по продолжительности, тем разбег, еще меньше.

И так мы знаем средний FPS, к которому будем приводить все имеющиеся фрагменты. Открываем в VirtualDub первый AVI файл:

Передвинете ползунок в конец фрагмента или нажмите соответствующую кнопку на панели и посмотрите его продолжительность :

У меня фрагмент имеет продолжительность 0 часов, 08 минут, 40.369 секунд.

Переходим к уже знакомому диалоговому окну:

Выбираем пункт "Change to...". Вписываем среднее известное значение, остальное по умолчанию, нажимаем ОК.

Посмотрите снова на продолжительность вашего фрагмента, теперь она другая:

В силу того, что у меня фрагмент всего 8 минут продолжительностью и FPS изменялся очень не значительно - изменение в его продолжительности составило лишь доли секунды. Это значит, что в конце фрагмента рассинхронизация видео и звука составляет как раз эти доли секунды. Что, в общем-то, совсем не много и даже если очень стараться врятли можно их будет заметить при просмотре. Поэтому я не вижу смысла корректировать синхронизацию, в данном случае, пусть остается, как есть.

Сохраняем изменения FPS. Для этого, предварительно убедитесь, что для видео и аудио потоков, в соответствующих меню, выбран пункт "Direct stream copy". Т.е. потоки будут копироваться без обработки.

Сохраняем.

Таким образом, обрабатываются все фрагменты. Если у всех у них будет такая незначительная рассинхронизация, как в примере, то можно сказать, что вам повезло.

После обработки всех фрагментов, вы можете переходить, непосредственно к соединению AVIшек. Делается это, теперь, в точности так же, как и при идеальном варианте, пункт 1.

Тем же кому, повезло меньше, и рассинхронизация получилась заметной, посвящается дальнейшее описание...

Рассинхронизацию в пределах 0.5 секунд, к концу фрагмента, можно в какой-то степени исправить имеющимися у VirtualDub средствами. Для этого нужно зайти :

Здесь выберете "Preload" и "Interleave.." = 1000ms ... 1500ms. Изменяя значение "Delay audio track by" вы можете немного сдвинуть звук, относительно видео потока. Положительное значение используйте, если звук опережает видео. Отрицательные значения используйте, если наоборот звук отстает от видео.

Вообще, конечно, в нашем случае рассинхронизация имеет нарастающий характер, поэтому ее нельзя исправить простым сдвижением аудио потока, относительно видео потока. Но ее можно в некоторой степени компенсировать или сделать менее заметной.

К примеру, изначально вы имеете, в начале полную синхронизацию, а к концу уход одного потока относительно другого составляет 0.5 секунд. Сделайте так, что бы уже в начале была рассинхронизация 0.25 секунд, таким образом, где-то по середине будет синхронность, а в конце снова уход на 0.25 секунд.

Только не подумайте, что 0.5 секунд - это какое-то ограничение, просто я считаю, что большую рассиннхронизацию, таким сдвижением потока не исправить и не компенсировать, она все равно останется заметной.

Для сохранения изменений в AVI, после изменения параметра "Delay audio track by", так же достаточно выбрать для видео и аудио потоков "Direct stream copy", после чего сохранить.

Тех же, кого не устраивает устранение рассинхронизации за счет сдвижения потока, а так же кому вообще не повезло и имеющаяся рассинхронизация значительна - читайте следующий пункт.

2.2. Приведение AVI файлов к одному FPS (разбег большой).

VirtualDub хорошая программа - это в не сомнения. Однако нет в ней опций, которые могли бы устранить значительную рассинхронизацию видео и звука при большом изменении частоты кадров. Поэтому способ описываемый далее, предполагает обработку звука отдельно от видео...

Открываем в VirtualDub первый AVI файл:

Сохраняем звук открытого AVI в отдельный WAV файл :

Для видео выбираем "Direct stream copy", для звука "No audio" :

Переходим к знакомому диалоговому окну:

Выбираем пункт "Change to...". Вписываем среднее известное значение, остальное по умолчанию, нажимаем ОК.

Перейдите на конец фрагмента, что бы посмотреть его продолжительность, после изменения FPS.

Запишите значение времени. Сохраните AVI.

Таким образом, мы имеет отдельно звук в WAV файле, и имеем AVI файл, с измененным FPS без звука.

Теперь нам понадобиться звуковой редактор, например SonicFoundry Sound Forge или Syntrillium Cool Edit (конечно же, есть и другие). У меня под руками оказалась программа Cool Edit, поэтому я буду рассказывать, и показывать на ее примере.

Запускаем Cool Edit, открываем WAV файл.

Для сжатия/растяжения звука по времени, выбираем в меню:

В диалоговом окне, в поле "Length" необходимо ввести новую длину WAV файла, т.е. то значение, которое мы переписали поле смены FPS в VirtualDub. Значение необходимо вводить в секундах (например, у меня значение 0:07:13.595, в секундах это 7*60+13.595=433.595). Вводим, нажимаем OK :

По окончанию обработки убедитесь, что продолжительность соответствует необходимой. У меня она отличается на 1 тысячную долю секунды, думаю это в пределах допустимого. :)

Сохраняем.

Запускаем VirtualDub, открываем наш AVI файл без звука. Через меню "Audio" подключаем новый звук:

Для сохранения AVI с новым звуком, для видео и аудио потоков выбираем "Direct stream copy" :

Сохраняем.

Так обрабатываем все AVI файлы. Ну а после того как все будет готово, файлы можно соединять так, как это делается при идеальном варианте, пункт 1.

Ну вот вроде и все! :-)

3. Советы и замечания :

  • Приводить частоту кадров имеет смысл только в случае, если исходник не сжат, или сжат MJPEG-ом, Huffyuv-ом. Т.е. кодеком, при сжатии которым, каждый кадр является ключевым. В противном случае, все равно, обрабатываться будут только полные кадры (ключевые) и ничего хорошего не выйдет...

  • Если не исключена возможность пропуска кадров в обрабатываемых фрагментах, то первое, что нужно сделать после открытия исходного авишника ВиртуалДубом (ВД) - проверить его на dropped frames. Жмете shift + "}" для поиска вперёд либо shift + "{" для поиска назад. Удаляете клавишей Delete. Если это не сделать - звук неизбежно разбежится с видеопотоком. Эти манипуляции нужно делать несколько раз, пока ВД не сообщит "no next (previous) dropped frame" (в нижнем левом углу). Эти фреймы ВД просто игнорирует - так что лучше удалить больное место сразу. Только после этого следует переходить к обработке AVI : изменению FPS, сохранению отдельно видео/звука и т.д.

  • Copyright © Олег Антошкив
    Хочу дать совет как избежать процесса перезаписи AVI с целью изменить у него Frame Rate. Для этого достаточно использовать программу : Avifrate1.10 - framerate changer for Avis. Она изменяет Frame Rate в заголовке AVI без перезаписывания всего файла, а это существенно экономит время и не нужно свободного места на диске для промежуточного файла. Я неоднократно использовал эту программу для приведения частоты кадров к одному значению у нескольких AVI и последующей склейки в VirtualDub.

    Со звуком я немного по другому работал: из каждого фрагмента сохранял звук в отдельные файлы, корректировал их длительность, потом склеивал все звуковые фрагменты в один кусок и уже его подключал в VirtualDub в качестве источника звука для "виртуально" соединенных фрагментов видео.


Описание утилиты AVISynth.

AVISynth

AVISynth действительно классная утилита, однако многие не используют её! Причиной этого может быть даже не сложность её применения а то, что просто не разобрались с её установкой и запуском или вообще не знают о ней. Поэтому объяснение что такое AVISynth и с чем её едят представляется полезным

Представляемый далее материал является в основном переводом и систематизацией файлов описаний от разработчиков AVISynth и подключаемых фильтров.
  • Введение
    • Что такое AVISynth?
    • AVISynth и VirtualDub
    • Установка AVISynth
    • Информация об авторах AVISynth
  • Общая информация.
  • Компактный список команд.
  • Развёрнутый список команд.
  • Учебное пособие.
    • Линейное редактирование
    • Нелинейное редактирование
    • Переменные
    • Подразумевание last
    • Объёктно-ориентированная запись
  • Подгружаемые фильтры.
    • Фильтры VirtualDub.
    • Плагин InverseTelecine.dll.
      • InverseTelecine
      • Deinterlace
      • Decimate
    • Плагин MPEG2DEC.dll.
      • mpeg2source
      • TemporalSmoother
      • SelectRangeEvery
    • Плагин SpatialSoftenMMX.
    • Плагин GreedyHMA - Greedy (High Motion для AVISynth).
      • Более полное описание параметров.
      • Известные проблемы и ограничения.
      • Метод избавления от гребёнки Greedy (High Motion).
  • Ссылки.
Вопросы и замечания направляйте Mitra


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • AddBorders
  • Набор
    • AlignedSplice
    • UnalignedSplice
  • Amplify
  • Animate
  • AssumeFPS
  • Набор
    • AssumeFrameBased
    • AssumeFieldBased
  • AudioDub
  • Набор
    • AVISource
    • OpenDMLSource
    • AVIFileSource
    • WAVSource
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • AudioDub
  • DelayAudio
  • ConvertAudioTo16bit
  • ResampleAudio
  • Amplify
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • BicubicResize
  • BilinearResize
  • Набор
    • Blackness
    • BlankClip
  • Набор
    • Blur
    • Sharpen
  • Bob
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • ChangeFPS
  • ColorBars
  • ComplementParity
  • ConvertAudioTo16bit
  • Набор
    • ConvertToYUY2
    • ConvertToRGB
  • Набор
    • Crop
    • CropBottom
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
Нажмите на стрелку для получения списка фильтров относящихся к выбранной категории
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • ConvertToYUY2
    • ConvertToRGB
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • DelayAudio
  • DeleteFrame
  • DirectShowSource
  • Dissolve
  • DoubleWeave
  • DuplicateFrame
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Subtract
  • ShowFrameNumber
  • ShowSMPTE
  • Набор
    • StackHorizontal
    • StackVertical
  • ShowFiveVersions
  • FlipVertical
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Trim
  • Набор
    • AlignedSplice
    • UnalignedSplice
  • Dissolve
  • Reverse
  • Набор
    • FadeOut
    • FadeOut2
  • Набор
    • SelectEven
    • SelectOdd
  • Pulldown
  • Interleave
  • SelectEvery
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • FadeOut
    • FadeOut2
  • FixBrokenChromaUpsampling
  • FixLuminance
  • FlipVertical
  • FreezeFrame
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • AssumeFPS
  • ChangeFPS
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • FreezeFrame
  • DeleteFrame
  • DuplicateFrame
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • HorizontalReduceBy2
    • VerticalReduceBy2
    • ReduceBy2
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • IPCSource
  • Interleave
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Levels
  • Набор
    • Blur
    • Sharpen
  • Набор
    • SpatialSoften
    • TemporalSoften
  • FixLuminance
  • FixBrokenChromaUpsampling
  • Letterbox
  • Subtitle
  • PeculiarBlend
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • AssumeFrameBased
    • AssumeFieldBased
  • ComplementParity
  • SeparateFields
  • Weave
  • DoubleWeave
  • Bob
  • SwapFields
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Letterbox
  • Levels
  • Набор
    • LoadPlugin
    • LoadVirtualdubPlugin
    • LoadVFAPIPlugin
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • MessageClip
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Animate
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • AVISource
    • OpenDMLSource
    • AVIFileSource
    • WAVSource
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • PeculiarBlend
  • Pulldown
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • LoadPlugin
    • LoadVirtualdubPlugin
    • LoadVFAPIPlugin
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • ResampleAudio
  • Набор
    • HorizontalReduceBy2
    • VerticalReduceBy2
    • ReduceBy2
  • Reverse
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • AVISource
    • OpenDMLSource
    • VIFileSource
    • WAVSource
  • Набор
    • SegmentedAVISource
    • SegmentedDirectShowSource
  • DirectShowSource
  • IPCSource
  • Набор
    • Blackness
    • BlankClip
  • ColorBars
  • MessageClip
  • Version
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • HorizontalReduceBy2
    • VerticalReduceBy2
    • ReduceBy2
  • BilinearResize
  • BicubicResize
  • Набор
    • Crop
    • CropBottom
  • AddBorders
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • SegmentedAVISource
    • SegmentedDirectShowSource
  • Набор
    • SelectEven
    • SelectOdd
  • SelectEvery
  • SeparateFields
  • Набор
    • Blur
    • Sharpen
  • ShowFiveVersions
  • ShowFrameNumber
  • ShowSMPTE
  • Набор
    • SpatialSoften
    • TemporalSoften
  • Набор
    • StackHorizontal
    • StackVertical
  • Subtitle
  • Subtract
  • SwapFields
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • SpatialSoften
    • TemporalSoften
  • Trim
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • AlignedSplice
    • UnalignedSplice
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Список команд AVISynth по категориям.
  • Методы для загрузки или создания видео-клипов
    • Набор
      • AVISource
      • OpenDMLSource
      • VIFileSource
      • WAVSource
    • Набор
      • SegmentedAVISource
      • SegmentedDirectShowSource
    • DirectShowSource
    • IPCSource
    • Набор
      • Blackness
      • BlankClip
    • ColorBars
    • MessageClip
    • Version
  • Фильтры изменяющие размер кадра
    • Набор
      • HorizontalReduceBy2
      • VerticalReduceBy2
      • ReduceBy2
    • BilinearResize
    • BicubicResize
    • Набор
      • Crop
      • CropBottom
    • AddBorders
  • Фильтры для обработки изображения
    • Levels
    • Набор
      • Blur
      • Sharpen
    • Набор
      • SpatialSoften
      • TemporalSoften
    • FixLuminance
    • FixBrokenChromaUpsampling
    • Letterbox
    • Subtitle
    • PeculiarBlend
  • Фильтры для конвертации цветового пространства
    • Набор
      • ConvertToYUY2
      • ConvertToRGB
  • Фильтры для работы с черезстрочным видео
    • Набор
      • AssumeFrameBased
      • AssumeFieldBased
    • ComplementParity
    • SeparateFields
    • Weave
    • DoubleWeave
    • Bob
    • SwapFields
  • Методы для монтажа
    • Trim
    • Набор
      • AlignedSplice
      • UnalignedSplice
    • Dissolve
    • Reverse
    • Набор
      • FadeOut
      • FadeOut2
    • Набор
      • SelectEven
      • SelectOdd
    • Pulldown
    • Interleave
    • SelectEvery
  • Методы для изменения частоты кадров
    • AssumeFPS
    • ChangeFPS
  • Методы для работы с отдельными кадрами
    • FreezeFrame
    • DeleteFrame
    • DuplicateFrame
  • Методы для работы с аудио
    • AudioDub
    • DelayAudio
    • ConvertAudioTo16bit
    • ResampleAudio
    • Amplify
  • Отладка
    • Subtract
    • ShowFrameNumber
    • ShowSMPTE
    • Набор
      • StackHorizontal
      • StackVertical
    • ShowFiveVersions
    • FlipVertical
  • Мета-фильтры
    • Animate
  • Подгружаемые фильтры (Plug-Ins)
    • Набор
      • LoadPlugin
      • LoadVirtualdubPlugin
      • LoadVFAPIPlugin
Алфавитный список команд AVISynth.
  • A
    • AddBorders
    • Набор
      • AlignedSplice
      • UnalignedSplice
    • Amplify
    • Animate
    • AssumeFPS
    • Набор
      • AssumeFrameBased
      • AssumeFieldBased
    • AudioDub
    • Набор
      • AVISource
      • OpenDMLSource
      • AVIFileSource
      • WAVSource
  • B
    • BicubicResize
    • BilinearResize
    • Набор
      • Blackness
      • BlankClip
    • Набор
      • Blur
      • Sharpen
    • Bob
  • C
    • ChangeFPS
    • ColorBars
    • ComplementParity
    • ConvertAudioTo16bit
    • Набор
      • ConvertToYUY2
      • ConvertToRGB
    • Набор
      • Crop
      • CropBottom
  • D
    • DelayAudio
    • DeleteFrame
    • DirectShowSource
    • Dissolve
    • DoubleWeave
    • DuplicateFrame
  • F
    • Набор
      • FadeOut
      • FadeOut2
    • FixBrokenChromaUpsampling
    • FixLuminance
    • FlipVertical
    • FreezeFrame
  • H
    • Набор
      • HorizontalReduceBy2
      • VerticalReduceBy2
      • ReduceBy2
  • I
    • IPCSource
    • Interleave
  • L
    • Letterbox
    • Levels
    • Набор
      • LoadPlugin
      • LoadVirtualdubPlugin
      • LoadVFAPIPlugin
  • M
    • MessageClip
  • O
    • Набор
      • AVISource
      • OpenDMLSource
      • AVIFileSource
      • WAVSource
  • P
    • PeculiarBlend
    • Pulldown
  • R
    • ResampleAudio
    • Набор
      • HorizontalReduceBy2
      • VerticalReduceBy2
      • ReduceBy2
    • Reverse
  • S
    • Набор
      • SegmentedAVISource
      • SegmentedDirectShowSource
    • Набор
      • SelectEven
      • SelectOdd
    • SelectEvery
    • SeparateFields
    • Набор
      • Blur
      • Sharpen
    • ShowFiveVersions
    • ShowFrameNumber
    • ShowSMPTE
    • Набор
      • SpatialSoften
      • TemporalSoften
    • Набор
      • StackHorizontal
      • StackVertical
    • Subtitle
    • Subtract
    • SwapFields
  • T
    • Набор
      • SpatialSoften
      • TemporalSoften
    • Trim
  • U
    • Набор
      • AlignedSplice
      • UnalignedSplice
  • V
    • Version
    • Набор
      • HorizontalReduceBy2
      • VerticalReduceBy2
      • ReduceBy2
  • W
    • Weave
    • Набор
      • AVISource
      • OpenDMLSource
      • AVIFileSource
      • WAVSource


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Version
  • Набор
    • HorizontalReduceBy2
    • VerticalReduceBy2
    • ReduceBy2
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Weave
  • Набор
    • AVISource
    • OpenDMLSource
    • AVIFileSource
    • WAVSource
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Описание утилиты AVISynth.

A
AddBorders
AddBorders(clip,left,top,right,bottom)

AddBorders добавляет чёрные границы по краям изображения, которые имеют указанную ширину (в пикселях). Пространство цвета YUY2 хранит цветовую информацию для двух пикселей по горизонтали, таким образом, работая в режиме YUY2, left и right должны быть чётными.

Помните, что многие алгоритмы сжатия с потерями плохо работают с одноцветными границами, если их размер не кратен размеру блока (16 пикселов для MPEG)

Вы можете использовать этот фильтр в комбинации с Crop для смещения изображения без изменения размера кадра. К примеру:
# Сместить 352x240 изображение на 2 пикселя вправо
Crop(0,0,350,240).AddBorders(2,0,0,0)
AlignedSplice / UnalignedSplice
AlignedSplice(clip1,clip2[,...])
UnalignedSplice(clip1,clip2[,...])

AlignedSplice и UnalignedSplice соединяют два или более видео-клипов непрерывно. Различие между фильтрами лежит в том, как они обращаются со звуковыми дорожками. UnalignedSplice просто соединяет их без внимания к синхронизации с видео. AlignedSplice обрезает первую звуковую дорожку или вставляет тишину, смотря что требуется для гарантии сохранения синхронизации с видео второй звуковой дорожки.

Вы должны использовать UnalignedSplice когда объединяемые фонограммы были исходно непрерывны - к примеру, когда вы объединяете файлы захваченные в AVI_IO. Небольшие ошибки отсчётов времени могут вести к щелчкам в звуке если вы примните AlignedSplice в такой ситуации.

Скриптовый язык AVISynth предоставляет + и ++ как синонимы для UnalignedSplice и AlignedSplice соответственно
Пример 1:
# Объединить сегментированный файл захвата для формирования цельного клипа
UnalignedSplice(AVISource("capture1.avi"), AVISource("capture2.avi"), AVISource("capture3.avi"))
# или: AVISource("capture1.avi") + AVISource("capture2.avi") + AVISource("capture3.avi")
Пример 2:
# Извлечь три сцены из клипа и объединить их вместе в новом порядке
AVISource("video.avi")
edited_video = Trim(2000,2500) ++ Trim(3000,3500) ++ Trim(1000,1500)
Amplify / AmplifydB
Amplify(clip,amount)
Amplify(clip,left,right)
AmplifydB(clip,amount)
AmplifydB(clip,left,right)

Команда Amplify умножает отсчёты аудио-выборки на amount. Вы можете задавать различные коэффициенты для двух стереоканалов (left и right). AmplifydB тоже самое, исключая то, что значение задаётся в dB. Вы можете использовать отрицательные значения (или масштабный коэффициент от 0 до 1) для уменьшения громкости. Отрицательный масштабный коэффициент сдвинет фазу на 180°.

По ходу процесса отсчёты аудио-выборке конвертируются в 16 бит.
Animate
Animate(start-frame,end-frame,"filter",start-args,end-args)

Animate это мета-фильтр, который вычисляет свой параметр filter с непрерывно изменяемыми аргументами. В кадре start-frame и ранее, фильтр вычисляется с аргументами заданными в start-args. В кадре end-frame и позднее, фильтр вычисляется с аргументами заданными в end-args. В середине, аргументы линейно интерполируются для гладкого перехода.

Аргумент filter должен быть заключён в символы цитирования, и два вложенных списка аргументов не заключены в скобки. Строки и видео-клипы не могут интерполироваться, и значит должны совпадать в обоих списках аргументов. Вы не можете использовать запись в стиле ООП или предполагать last в этом filter, даже если обычно filter позволяет такое в своих аргументах.

Фильтр некорректно обрабатывает изменение звуковой дорожки, так что не рекомендуется применять его с фильтрами(filter) которые её изменяют. И во имя неба не давайте начальных и конечных параметров приводящих к различным размерам кадра.

Аргумент filter может также быть Animate если вы хотите квадратичную, а не линейную интерполяцию, но если об этом слишком много думать, то голова может разлететься.

Примеры

# Сделать скроллинг для "Version" видео

ver = Version()
return Animate(0,149,"Crop",ver,0,0,64,32,ver,448,0,64,32)

# Растворить(Fade) в белое

Animate(100,200,"Levels",last,0,1,255,0,255,last,0,1,255,255,255)

# Выполнить постепенное увеличение из центра видео 320x240,
# начиная с увеличения 1:1 в кадре 100 и кончая увеличением
# 4:1 в кадре 200

Animate(100,200, "BicubicResize",last,0,0,320,240,320,240,last,120,90,80,60,320,240)

# Сделать текст "Hello, World!" увеличивающимся из центра видео 320x240

Animate(0,48,"Subtitle",last,"Hello, World!",160,120,0,99999,"Arial",last,0,"Hello, World!",25,130,0,99999,"Arial",48)
AssumeFPS
AssumeFPS(clip,new_fps[,sync_audio])

Команда AssumeFPS изменяет частоту кадров без изменения их числа (в результате видео воспроизводиться быстрее или медленнее); если sync_audio имеет значение "истина", то частота дискретизации звука также меняется необходимым образом.
AssumeFrameBased / AssumeFieldBased
AssumeFrameBased(clip)
AssumeFieldBased(clip)

AVISynth следит, является клип основанным на полях или кадрах. Если клип основан на полях, то также сохраняется соотношение каждого поля (какое оно, верхние или нижнее поле кадра). Если клип основан на кадрах, то сохраняется порядок полей в кадре (т.е. какое поле в кадре идёт первым, когда они разделяются)

Однако эта информация необязательно верна, так как информация о полях обычно не хранится в видео-файлах и AVISynth методы источники только предполагают её. AssumeFrameBased и AssumeFieldBased позволяют вам сказать AVISynth истинный тип клипа.

AssumeFrameBased выбрасывает существующую информацию и считает, что клип является основанным на кадрах, с нижним (чётным) полем первым в каждом кадре. (Метод-источник делает так). Если вы желаете верхнее поле быть первым, используйте после ComplementParity.

AssumeFieldBased выбрасывает существующую информацию и считает, что клип является основанным на полях, с четными полями внизу и нечётными полями вверху. Если вы хотите расположить их наоборот, используйте после ComplementParity.
AudioDub
AudioDub(video-clip,audio-clip)

AudioDub берёт видео-поток из первого аргумента, аудио-поток из второго и объединяет их в один клип. Если какай-то поток отсутствует, фильтр попробует в другом порядке, если и это не поможет он вернёт ошибку.

Пример:

# Загрузить сегменты захваченные AVICAP32 которая пишет
# видео в несколько AVI сегментов и аудио в один WAV файл

video = AVISource("capture1.avi") + AVISource("capture2.avi")
audio = WAVSource("capture.wav")
AudioDub(video, audio)
AVISource / OpenDMLSource / AVIFileSource / WAVSource
AVISource("filename")
OpenDMLSource("filename")
AVIFileSource("filename")
WAVSource("filename")

AVISource передаётся один аргумент, являющийся именем файла в кавычках. Метод пытается считать этот файл используя либо интерфейс "Video-for-Windows" либо встроенный OpenDML код (перенесённый из VirtualDub). Фильтр способен загрузить любой файл, для которого существует AVIFile обработчик. Сюда включаются не только AVI файлы, но и WAV, AVS (скрипт AVISynth) и VDR (фрейм-сервер VirtualDub).

Метод AVISource определяет тип файла и вызывает наиболее соответствующий AVIFile или OpenDML обработчик. В случае, если открыть файл таким образом не удаётся, можно использовать OpenDMLSource или AVIFileSource, явно указывая какой тип обработчика использовать. Оба фильтра способны читать обычные (>2GB) AVI файлы. Но только через OpenDML можно работать с файлами большего размера, и только AVIFile открывает не AVI файлы (WAV, VDR, AVS).

Примеры

AVISource("d:\capture.avi") # Замечание C-программистам: обратный слеш не дублируется.
AVISource("c:/capture/00.avi") # прямой слеш также работает
AVISource("f:\soundtrack.wav") # это работает
WAVSource("f:\soundtrack.wav") # и это тоже


Описание утилиты AVISynth.

Методы для работы с аудио
AudioDub
AudioDub(video-clip,audio-clip)

AudioDub берёт видео-поток из первого аргумента, аудио-поток из второго и объединяет их в один клип. Если какай-то поток отсутствует, фильтр попробует в другом порядке, если и это не поможет он вернёт ошибку.

Пример:

# Загрузить сегменты захваченные AVICAP32 которая пишет
# видео в несколько AVI сегментов и аудио в один WAV файл

video = AVISource("capture1.avi") + AVISource("capture2.avi")
audio = WAVSource("capture.wav")
AudioDub(video, audio)
DelayAudio
DelayAudio(clip,seconds)

DelayAudio задерживает звуковую дорожку на seconds секунд. seconds может быть отрицательным и/или иметь дробную часть.

Пример:

# Воспроизводить аудио на полсекунды раньше
DelayAudio(-0.5)
ConvertAudioTo16bit
ConvertAudioTo16bit(clip)

Метод ConvertAudioTo16bit преобразует отсчёты аудио-выборки из 8 в 16 бит.
ResampleAudio
ResampleAudio(clip,new-sample-rate)

Метод ResampleAudio проводит высококачественное изменение частоты дискретизации аудио.
Amplify / AmplifydB
Amplify(clip,amount)
Amplify(clip,left,right)
AmplifydB(clip,amount)
AmplifydB(clip,left,right)

Команда Amplify умножает отсчёты аудио-выборки на amount. Вы можете задавать различные коэффициенты для двух стереоканалов (left и right). AmplifydB тоже самое, исключая то, что значение задаётся в dB. Вы можете использовать отрицательные значения (или масштабный коэффициент от 0 до 1) для уменьшения громкости. Отрицательный масштабный коэффициент сдвинет фазу на 180°.

По ходу процесса отсчёты аудио-выборке конвертируются в 16 бит.


Описание утилиты AVISynth.

B
BicubicResize
BicubicResize(clip,target-width,target-height[,b,c])
BicubicResize(clip,target-width,target-height,b,c,source-left,source-top,source-width,source-height)

BicubicResize аналогичен BilinearResize, не считая замены линейной фильтрации на Митчелла-Нетравали двухпараметрическую кубическую. Параметры b и c могут быть использованы для настройки свойств кривой. С b=0 и c=0.75 фильтр работает идентично фильтру VirtualDub "resize [precise bicubic]" и результат одинаков, с учётом проблемы масштабного коэффициента описанной в BilinearResize. Значения по умолчанию: b=1/3 и c=1.3 рекомендованы Митчеллом и Нетравали как дающие наиболее визуально приятные результаты для человека в субъективных тестах. Большие значения b и c дают интересные эффекты, например попробуйте b=0 и c=-5.

При увеличении размера кадра, BicubicResize даёт результаты выглядящие значительно лучше нежели BilinearResize. Однако при уменьшении результаты сблизятся или у BilinearResize будет даже лучше. Несмотря на то, что бикубический фильтр VirtualDub даёт изображение, которое выглядит лучше чем билинейный, это в основном за счёт подчёркивания границ бикубическим фильтром, а не результат лучшей выборки. Чёткое изображение хорошо, пока вы не попытаетесь его сжать. В этот момент они очень быстро начнут раздражать вас. BicubicResize по умолчанию не подчёркивает границ так сильно, как бикубический в VirtualDub, но все же подчёркивает сильнее чем билинейный. Если вы планируете кодировать видео с низким битрейтом, не удивляйтесь, если BilinearResize даст лучшее качество
BilinearResize
BilinearResize(clip,target-width,target-height)
BilinearResize(clip,source-left,source-top,source-width,source-height,target-width,target-height)

Фильтр BilinearResize масштабирует кадры входного видео к произвольному новому размеру. Передача необязательных параметров даст в результате тот же результат, как если бы к видео-клипу был применён Crop с этими аргументами до BilinearResize (только быстрее).

BilinearResize использует стандартную билинейную фильтрации. И практически идентичен фильтру VirtualDub "resize [precise bilinear]". Отличие в том, что фильтр VirtualDub похоже берёт не совсем верный масштабный коэффициент. В результате пиксели на верхней и правой границе обрезаются либо дублируются. Ошибка становиться заметна при увеличении вдвое или больше, но в других случаях несущественна.

Примеры

# Загрузить видео-файл и отмасштабировать к 240x180 (с исходного размера)
AVISource("video.avi").BilinearResize(240,180)

# Загрузить 720x480 (CCIR601) видео и отмасштабировать к 252x240 (VCD), сохраняя соотношение сторон
AVISource("dv.avi").BilinearResize(8,0,704,480,352,240)

# Извлечь верхний правый квадрант видео-клипа 320x240 и увеличить его до размеров всего кадра
BilinearResize(160,0,160,120,320,240)
Blackness / BlankClip
Blackness(clip,duration)
BlankClip(template-clip, length,width,height,pixel_type,fps,fps_denominator,audio_rate,stereo,sixteen_bit,color)

Метод BlankClip формирует одноцветный, беззвучный видео-клип указанной длительности (в кадрах). Клип переданный в качестве параметров используется в качестве шаблона для частота кадров, размер кадра т.д.), но вы можете задать все параметры клипа без указания шаблона. Цвет должен быть задан как шестнадцатеричное RGB значение. Без аргументов BlankClip формирует чёрный десяти-секундный клип, 640x480, 24 FPS, 16 bit 44100 Hz стерео.

Blackness это псевдоним BlankClip, внесённый для обратной совместимости.
Blur / Sharpen
Blur(clip,amount)
Sharpen(clip,amount)

Фильтр использует простую 3x3 размывающую или обостряющую матрицу весов пикселов. Наибольший допустимый аргумент для Blur около 1.58, который соответствует равномерному размытию 3x3 пикселя. Значение 1.0 даёт вам веса пикселов (1/4, 1/2, 1/4). Если вам требуется Гауссовское размытие большего радиуса, примените несколько копий Blur(1.0) последовательно.

Отрицательные значения для Blur на самом деле повышают резкость изображения, и фактически Sharpen просто псевдоним для Blur(- n). Наименьшее допустимое значение для Blur - -1.0, и наибольшее для Sharpen - 1.0
Bob
Bob(clip[,b,c][,height])

Bob берёт клип и убирает "гребёнку" следующим образом. Фильтр увеличивает каждое поля до размеров целого кадра интерполяцией между строками. Верхнее поле немного сдвигается вверх в сравнении с нижним, так что картинка на самом деле не прыгает вверх-вниз. Однако, она начинает "мерцать" на стационарных сценах, так как интерполяция на самом деле не восстанавливает другое поле достаточно точно.

Фильтр использует BicubicResize для грязной работы. Вы можете указывать ему значения b и с. Также вы можете воспользоваться случаем изменить вертикальное разрешение параметром height.


Описание утилиты AVISynth.

C
ChangeFPS
ChangeFPS(clip,new_fps)

Команда ChangeFPS изменяет частоту кадров удаляя или добавляя их для сохранения скорости воспроизведения.
ColorBars
ColorBars(width,height)

Метод ColorBars формирует видео-клип, содержащий цветные полосы SMPTE масштабированные к любому размеру изображения. Формируется клип RGB, 29.97 FPS, длительностью 1 час.
ComplementParity
ComplementParity(clip)

Если клип основан на полях, ComplementParity меняет верхние поля на нижние и наоборот. Если клип основан на кадрах, фильтр изменяет порядок полей в кадре (нижнее -> первое на верхнее -> первое и наоборот).
ConvertAudioTo16bit
ConvertAudioTo16bit(clip)

Метод ConvertAudioTo16bit преобразует отсчёты аудио-выборки из 8 в 16 бит.
ConvertToYUY2 / ConvertToRGB
ConvertToYUY2(clip)
ConvertToRGB(clip)

AVISynth способен внутри работать с двумя форматами цвета, RGB и YUY2. Описываемые два фильтра конвертируют между ними. Если видео уже в нужно формате, оно не изменяется
    В AVISynth следующие фильтры не поддерживают RGB формат:
  • SpatialSoften
  • TemporalSoften
  • FixLuminance
  • FixBrokenChromaUpsampling
  • PeculiarBlend
  • Все VirtualDub и VFAPI плагины.

Если вы попытаетесь использовать любой из этих фильтров с RGB источником, то получите ошибку. Вставка ConvertToYUY2 непосредственно перед вызвавшим её фильтром должно решить проблему. Все фильтры AVISynth поддерживают YUY2 формат.

В большинстве случаев в фильтре ConvertToRGB нет необходимости. Если выход AVISynth в YUY2 формате, а приложение ожидает RGB, системы использует установленный YUY2 кодек и выполнит преобразование. Однако, если кодек YUY2 не установлен, или если (как например в случае кодека ATI's YUY2) кодек преобразует из YUY2 в RGB неверно, можно использовать встроенный в AVISynth фильтр.

HuffYUV действует как системный YUY2 кодек если нет других установленных кодеков. Так что если вы установите HuffYUV и уберёте все другие YUY2 кодеки, вам никогда не понадобиться ConvertToRGB.

Пример:

# Имеется небольшое искажение вызываемое преобразованием между YUV и RGB
# Посмотрим, как это можно увидеть

control = ConvertToYUY2()
test1 = ConvertToRGB(ConvertToYUY2(ConvertToRGB(control)))
test2 = ConvertToYUY2(ConvertToRGB(ConvertToYUY2(test1)))
return Subtract(test2,control)
Crop / CropBottom
Crop(clip,left,top,width,height)
CropBottom(clip,count)

Crop обрезает лишние пиксели с границ каждого кадра. Если источник имеет размер 720x480, а вы хотите уменьшить его до 352x240 для VideoCD, то следует использовать код
# Преобразовать CCIR601 в VCD, с сохранением верного соотношения сторон
ReduceBy2
Crop(4,0,352,240)

Пространство цвета YUY2 хранит цветовую информацию для двух пикселей по горизонтали, таким образом, работая в режиме YUY2, left и width должны быть чётными.

Альтернативный фильтр CropBottom полезен для обрезания мусор снизу видео-клипа захваченного с VHS кассеты. Он убирает count линий снизу каждого кадра


Описание утилиты AVISynth.

Фильтры для конвертации цветового пространства
ConvertToYUY2 / ConvertToRGB
ConvertToYUY2(clip)
ConvertToRGB(clip)

AVISynth способен внутри работать с двумя форматами цвета, RGB и YUY2. Описываемые два фильтра конвертируют между ними. Если видео уже в нужно формате, оно не изменяется
    В AVISynth следующие фильтры не поддерживают RGB формат:
  • SpatialSoften
  • TemporalSoften
  • FixLuminance
  • FixBrokenChromaUpsampling
  • PeculiarBlend
  • Все VirtualDub и VFAPI плагины.

Если вы попытаетесь использовать любой из этих фильтров с RGB источником, то получите ошибку. Вставка ConvertToYUY2 непосредственно перед вызвавшим её фильтром должно решить проблему. Все фильтры AVISynth поддерживают YUY2 формат.

В большинстве случаев в фильтре ConvertToRGB нет необходимости. Если выход AVISynth в YUY2 формате, а приложение ожидает RGB, системы использует установленный YUY2 кодек и выполнит преобразование. Однако, если кодек YUY2 не установлен, или если (как например в случае кодека ATI's YUY2) кодек преобразует из YUY2 в RGB неверно, можно использовать встроенный в AVISynth фильтр.

HuffYUV действует как системный YUY2 кодек если нет других установленных кодеков. Так что если вы установите HuffYUV и уберёте все другие YUY2 кодеки, вам никогда не понадобиться ConvertToRGB.

Пример:

# Имеется небольшое искажение вызываемое преобразованием между YUV и RGB
# Посмотрим, как это можно увидеть

control = ConvertToYUY2()
test1 = ConvertToRGB(ConvertToYUY2(ConvertToRGB(control)))
test2 = ConvertToYUY2(ConvertToRGB(ConvertToYUY2(test1)))
return Subtract(test2,control)


Описание утилиты AVISynth.

D
DelayAudio
DelayAudio(clip,seconds)

DelayAudio задерживает звуковую дорожку на seconds секунд. seconds может быть отрицательным и/или иметь дробную часть.

Пример:

# Воспроизводить аудио на полсекунды раньше
DelayAudio(-0.5)
DeleteFrame
DeleteFrame(clip,frame)

DeleteFrame удаляет один кадр, указанный аргументом. Звуковая дорожка не изменяется, так что если вы примените фильтр слишком много раз подряд то можете получить заметную десинхронизацию.

Если вы хотите удалить диапазон кадров (скажем от a до b) вместе с соответствующей частью фонограммы, это можно сделать примерно так: Trim(0,a-1) ++ Trim(b+1,0).
DirectShowSource
DirectShowSource("filename" [, FPS])

DirectShowSource читает filename используя DirectShow, та же система воспроизведения мультимедиа файлов, что используется в Windows Media Player. Метод может загрузить большинство форматов проигрываемых Windows Media Player, в том числе MPEG, MP3 и QuickTime, также как и AVI файлы не поддерживаемые AVISource (например DV type 1 или файлы использующие только DirectShow кодеки). Попытайтесь считать AVI файлы сначала посредством AVISource и если не сработает поменяйте на DirectShowSource
    Несколько предостережений:
  • Звук пока не поддерживается.
  • GRF файлы не поддерживаются (возможно поддержка появиться в следующих версиях).
  • Некоторые декодеры (замечено с MS MPEG-4) формирует видео кверх-ногами. Вам потребуется использовать FlipVertical.
  • От DirectShow видео-декодеров не требуется поддерживать точное, покадровое позиционирование и большинство не делают этого. Пока вы просто читаете видео последовательно, всё должно быть в порядке, но да помогут вам небеса, если вы пожелаете чего-то более сложного. Это ограничение не относиться к AVI файлам, или любым другим форматам которые имеют покадрово-точный DirectShow декодер.
  • От DirectShow видео-декодеров даже не сообщать вам частоту кадров входящего видео. Большинство сообщают, но ASF декодер нет. Возможно как-нибудь эта проблема решиться авто-анализом потока (как делал VirtualDub), но сейчас вы должны задавать частоту кадров, например DirectShowSource("video.asf", fps=15).
Dissolve
Dissolve(clip1,clip2[,...],overlap)

Dissolve похож на AlignedSplice исключая то, что клипы объединяются с перекрытием. Последние overlap кадров первого видео-потока смешиваются последовательно с первыми overlap кадрами второго видео-потока так, что потоки постепенно перетекают один в другой. Аудио-потоки смешиваются также.

Термин "dissolve (растворение)" временами используется для различных эффектов в которых переход скорее поточечный, чем градиентный. Фильтр этого не делает.
DoubleWeave
DoubleWeave(clip)

Если клип источник основан на полях, фильтр DoubleWeave ведёт себя как Weave, исключая то, что он формирует удвоенное число кадров вместо того, чтобы объединять поля 0 и 1 в кадр 0, поля 2 и 3 в кадр 1 и т.д., он объединяет поля 0 и 1 в кадр 0, поля 1 и 2 в кадр 1 и т.д.. Он не изменяет частоту кадров или их количество.

Если клип источник основан на кадрах, фильтр действует как если бы вы разделили его вначале на поля используя SeparateFields

Weave фактически просто псевдоним для DoubleWeave следующим за SelectEven

Более вероятно вы захотите использовать фильтр типа SeleceOdd или Pulldown после применения этого фильтра, если вы действительно не хотите видео с частотой кадров 50 или 60. Может выглядеть неэффективным чередовать каждую пару полей только чтобы немедленно выбросить половину получившихся кадров, Но фактически, так как AVISynth генерирует кадры только по требованию, ненужные кадры никогда не будут сгенерированы.

Если вы используете видео основанное на полях, такое как отснятое видео- камерой, вам вероятно не нужен этот фильтр. Но если вы обрабатываете NTSC видео конвертированное из FILM и планируете использовать фильтр Pulldown, вам необходимо вначале использовать DoubleWeave. Смотрите фильтр Pulldown для объяснений.

Если вы обрабатываете PAL видео конвертированное из FILM, Pulldown вам не нужен, но вы можете захотеть использовать DoubleWeave в следующей ситуации:
# Повторить функциональность фильтра VirtualDub "PAL deinterlace"
DoubleWeave
SelectOdd
DuplicateFrame
DuplicateFrame(clip,frame)

Фильтр DuplicateFrame противоположен DeleteFrame - он дублирует один кадр указанный в аргументе. Как и в случае DeleteFrame звуковая дорожка не меняется.


Описание утилиты AVISynth.

Отладка
Subtract
Subtract(clip1,clip2)

Subtract формирует выходной клип в котором каждый пиксель устанавливается в соответствии с разницей между соответствующими пикселями в clip1 и clip2. Более точно, он устанавливается (50% gray) + (clip1 pixel) - (clip2 pixel). Вы можете использовать Levels после, если желаете повысить контраст. К примеру:
# Сделать разницу между clip1 и clip2 явно очевидной Subtract(clip1,clip2).Levels(127,1,129,0,255)

Если хотите в деталях увидеть разнице между смежными кадрами, можете использовать код:
Subtract(clip.Trim(1,0),clip)
ShowFrameNumber
ShowFrameNumber(clip)

ShowFrameNumber отрисовывает текст на каждом кадре показывающий каким AVISynth считает его номер. Фильтр иногда полезен при написании скриптов. Если вы примените дополнительные фильтры после ShowFrameNumber, будут рассматривать текст в кадре просто как часть картинки, так что номер может быть искажён к тому времени, как вы его увидите.
ShowSMPTE
ShowSMPTE(clip,fps)

Фильтр ShowSMPTE аналогичен ShowFrameNumber, но показывает код времени SMPTE (часы:минуты:ссекунды:кадр). Аргумент fps необходим и должен быть 24, 25, 30 или 29.97.
StackHorizontal / StackVertical
StackHorizontal(clip1,clip2[,...])
StackVertical(clip1,clip2[,...])

StackHorizontal берёт два видео-клипа и показывает их вместе слева-на-право. Высоты изображений и их цветовые форматы должны совпадать. Остальная информация (звуковая дорожка, частота кадров и т.д.) в основном берётся из первого клипа. StackVertical делает тоже самое, но сверху-вниз. Например:

Примеры

# Сравнение кадров с и без подавления шума
StackVertical(last, last.SpatialSoften(2,3,6))

# Располагает клипы переменных a, b, c, d квадратом:
# a b
# c d
StackVertical(StackHorizontal(a,b),StackHorizontal(c,d))
ShowFiveVersions
ShowFiveVersions(clip1,clip2,clip3,clip4,clip5)

ShowFiveVersions берёт пять видео-потоков и соединяет их в зигзагообразном порядке слева на право. Единственное применение для этого - помочь найти структуру NTSC "3:2 pulldown". Этого можно добиться используя такой код:
# Наблюдать все пять структур 3:2 pulldown сразу

DoubleWeave()
# Встаете фильтр изменения размера если надо (см. ниже)
a = Pulldown(0,2).Subtitle("0,2")
b = Pulldown(1,3).Subtitle("1,3")
c = Pulldown(2,4).Subtitle("2,4")
d = Pulldown(0,3).Subtitle("0,3")
e = Pulldown(1,4).Subtitle("1,4")
ShowFiveVersions(a,b,c,d,e)

Этот код показывает пять структур "3:2 pulldown" с добавленным текстом идентифицирующим каждую из них. Затем просматривая конечный фильм можно выбрать структуру не содержащую смешанных кадров. (При обычном "3:2 pulldown" должно быть две одинаково хороших. Посмотрите на диаграмму в описании для фильтра Pulldown и поймёте почему.) Если ни одна из пяти не подходит, то вы имеете дело с одной из более извращённых форм "3:2 pulldown" и вам может понадобиться использовать PeculiarBlend.

Кстати, если вы планируете захватывать в высоком разрешении и затем масштабировать к нужному размеру, как рекомендовалось, вы возможно должны поместить ReduceBy2 или BilinearResize или что-нибудь сразу после команды DoubleWeave в вышерасположенном коде, до DoubleWeave это сработает неверно, а если отложите на будущее, ShowFiveVersions сформирует по-настоящему большой кадр.
FlipVertical
FlipVertical(clip)

Фильтр FlipVertical поворачивает видео сверху вниз. Полезно при работе с ошибающимися видео-кодеками.


Описание утилиты AVISynth.

Методы для монтажа
Trim
Trim(clip,first-frame,last-frame)

Trim вырезает часть видео-клипа включающую только кадры с first-frame до last-frame. Звук также вырезается и остаётся синхронизированным. Передача 0 для last-frame означает "конец клипа". К примеру:
Trim(100,0) # удалить первые 100 кадров
AlignedSplice / UnalignedSplice
AlignedSplice(clip1,clip2[,...])
UnalignedSplice(clip1,clip2[,...])

AlignedSplice и UnalignedSplice соединяют два или более видео-клипов непрерывно. Различие между фильтрами лежит в том, как они обращаются со звуковыми дорожками. UnalignedSplice просто соединяет их без внимания к синхронизации с видео. AlignedSplice обрезает первую звуковую дорожку или вставляет тишину, смотря что требуется для гарантии сохранения синхронизации с видео второй звуковой дорожки.

Вы должны использовать UnalignedSplice когда объединяемые фонограммы были исходно непрерывны - к примеру, когда вы объединяете файлы захваченные в AVI_IO. Небольшие ошибки отсчётов времени могут вести к щелчкам в звуке если вы примните AlignedSplice в такой ситуации.

Скриптовый язык AVISynth предоставляет + и ++ как синонимы для UnalignedSplice и AlignedSplice соответственно
Пример 1:
# Объединить сегментированный файл захвата для формирования цельного клипа
UnalignedSplice(AVISource("capture1.avi"), AVISource("capture2.avi"), AVISource("capture3.avi"))
# или: AVISource("capture1.avi") + AVISource("capture2.avi") + AVISource("capture3.avi")
Пример 2:
# Извлечь три сцены из клипа и объединить их вместе в новом порядке
AVISource("video.avi")
edited_video = Trim(2000,2500) ++ Trim(3000,3500) ++ Trim(1000,1500)
Dissolve
Dissolve(clip1,clip2[,...],overlap)

Dissolve похож на AlignedSplice исключая то, что клипы объединяются с перекрытием. Последние overlap кадров первого видео-потока смешиваются последовательно с первыми overlap кадрами второго видео-потока так, что потоки постепенно перетекают один в другой. Аудио-потоки смешиваются также.

Термин "dissolve (растворение)" временами используется для различных эффектов в которых переход скорее поточечный, чем градиентный. Фильтр этого не делает.
Reverse
Reverse(clip)

Фильтр делает клип играющий в обратном направлении. Это применимо для наблюдения идущих задом наперед людей, во время прослушивания скрытых сатанинских посланий.
FadeOut / FadeOut2
FadeOut(clip,number-of-frames)
FadeOut2(clip,number-of-frames)

FadeOut и FadeOut2 делают видео-поток линейно затухающим в чёрный. Звуковая дорожка (если есть) также линейно заглушается в тишину. Эффект затухания действует только последние number-of-frames кадров видео. Последний кадр видео становиться практически-но-ещё-не-совсем чёрным. Дополнительно совершенно чёрный кадр добавляется в конец, увеличивая таким образом общее число кадров на один.

FadeOut2 работает также, не считая добавления двух чёрных кадров вместо одного. Единственная цель этого - обойти ошибку в Window Media Player. Все проверенные версии WMP не воспроизводят последний кадр MPEG файла - вместо этого они останавливаются на предпоследнем кадре когда воспроизведение завершается. Это оставляет показанным на экране неприглядный практически-но-ещё-не-совсем чёрный кадр по завершении фильма, если вы используете FadeOut. FadeOut2 избегает эту проблему.

FadeOut(n,clip) просто псевдоним для Dissolve(clip,Blackness(n+1,clip),n) (или n+2 вместо n+1 для FadeOut). Нет подобного фильтра FadeIn, но можно получить тот-же эффект обращением аргументов Dissolve: Dissolve(Blackness(n+1,clip),clip,n).
SelectEven / SelectOdd
SelectEven(clip)
SelectOdd(clip)

SelectEven делает выходной видео-поток используя только кадры входного видео-потока с чётными номерами. SelectOdd - его нечётное дополнение.

Так как кадры нумеруются с нуля, SelectEven фактически выбирает первый, третий, пятый, ... кадры по человеческому соглашению счёта.
Pulldown
Pulldown(clip,a,b)

Фильтр Pulldown просто выбирает два из каждых пяти кадров видеоисточника. Частота кадров уменьшается к двум третьим своего исходного значения. К примеру, Pulldown 0, 2 выберет кадры 0,2,5,7,10,12 и т.д.

Разработан для использования после DoubleWeave, и его цель - восстановление исходной частоты кадров фильма который был конвертирован в видео с применением процесса "3:2 pulldown".

Причина, по которой необходимо в начале использовать DoubleWeave в том, что карты захвата соединяют поля неверным образом. В терминах полей, последовательность 3:2 pulldown просто "A A B B B C C D D D ...", где символы с "A" по "D" представляют исходные кадры фильма. Но карты захвата соединяют поля в кадры без соблюдения структуры "3:2 pulldown", и в результате получается вот что:

A   B   C   D   D    (30fps)
A   B   B   C   D

В такой структуре кадр "C" никогда сам не возникает. После DoubleWeave каждая пара полей приобретает её собственный кадр, так что видео поток начинается так:

A A B B C C D D D    (60fps)
A B B B B C C D D
*     *   *     *

Теперь каждый кадр фильма имеет как минимум один свой кадр видео. В этом месте фильтр Pulldown с аргументами 0, 3 выберет кадры отмеченные "*" и вы получите

A     B   C     D    (24fps)
A     B   C     D

... то, что вам действительно нужно.

Очень сложно объяснить, но восстановление после "3:2 pulldown" это просто вопрос вставки шаблонного кода. Посмотрите приме для ShowFiveVersions.

Pulldown(a,b) внутренне реализован как SelectEvery(5,a,b).AssumeFrameBased.
Interleave
Interleave(clip,clip[,...])

Interleave чередует кадры из нескольких клипов по принципу кадр-за-кадром, так, к примеру, если вы дадите три аргумента, первые три кадры видеовыхода будут первыми кадрами трёх клипов источников, следующие три - вторыми кадрами видеоисточников и т.д..
SelectEvery
SelectEvery(clip,step-size[,offset1[,offset2[,...]]])

SelectEvery это обобщение таких фильтров, как SelectEven и Pulldown. Проще всего описать фильтр на примере:
SelectEvery(clip,2,0) # идентично SelectEven(clip)
SelectEvery(clip,2,1) # идентично SelectOdd(clip)
SelectEvery(clip,10,3,6,7) # выбрать кадры 3,6,7,13,16,17,23,26,27... из клипа источника
SelectEvery(clip,9) # выбрать кадры 0,9,18,27,... (второй аргумент предполагается равным 0)

Или вот так
# Взять прогрессивный клип 24FPS и применить "3:2 pulldown"
# получая на выходе чересстрочный клип 30FPS
AssumeFrameBased
SeparateFields
SelectEvery(8, 0,1, 2,3,2, 5,4, 7,6,7)
Weave


Описание утилиты AVISynth.

F
FadeOut / FadeOut2
FadeOut(clip,number-of-frames)
FadeOut2(clip,number-of-frames)

FadeOut и FadeOut2 делают видео-поток линейно затухающим в чёрный. Звуковая дорожка (если есть) также линейно заглушается в тишину. Эффект затухания действует только последние number-of-frames кадров видео. Последний кадр видео становиться практически-но-ещё-не-совсем чёрным. Дополнительно совершенно чёрный кадр добавляется в конец, увеличивая таким образом общее число кадров на один.

FadeOut2 работает также, не считая добавления двух чёрных кадров вместо одного. Единственная цель этого - обойти ошибку в Window Media Player. Все проверенные версии WMP не воспроизводят последний кадр MPEG файла - вместо этого они останавливаются на предпоследнем кадре когда воспроизведение завершается. Это оставляет показанным на экране неприглядный практически-но-ещё-не-совсем чёрный кадр по завершении фильма, если вы используете FadeOut. FadeOut2 избегает эту проблему.

FadeOut(n,clip) просто псевдоним для Dissolve(clip,Blackness(n+1,clip),n) (или n+2 вместо n+1 для FadeOut). Нет подобного фильтра FadeIn, но можно получить тот-же эффект обращением аргументов Dissolve: Dissolve(Blackness(n+1,clip),clip,n).
FixBrokenChromaUpsampling
FixBrokenChromaUpsampling(clip)

Замечено, что MS DV кодек обрабатывает цветовые каналы неверно, что может быть компенсировано фильтром FixBrokenChromaUpsampling. Вы должны поместить его после DirectShowSource, в случае использования MS DV кодека, или если вы заметите грязные линии появляющиеся в чересстрочных изображениях.
FixLuminance
FixLuminance(clip,intercept,slope)

Видеомагнитофон иногда имеет раздражающую привычку повышать яркость снизу в верх у каждого кадра. Цель этого фильтра последовательное затемнение верха изображения для компенсации. Если с вашим видеомагнитофоном всё в порядке, можете считать что этого фильтра нет.

Этот фильтр работает только в цветовом пространстве YUY2.
FlipVertical
FlipVertical(clip)

Фильтр FlipVertical поворачивает видео сверху вниз. Полезно при работе с ошибающимися видео-кодеками.
FreezeFrame
FreezeFrame(clip,first-frame,last-frame,source-frame)

Фильтр FreezeFrame заменяет все кадры между firts-frame и last-frame копиями source-frame. Звуковая дорожка не изменяется. Фильтр удобен для покрытия проблемных кадров в видео в случае когда вы имеете похожие кадры не имеющие проблем.


Описание утилиты AVISynth.

Методы для изменения частоты кадров
AssumeFPS
AssumeFPS(clip,new_fps[,sync_audio])

Команда AssumeFPS изменяет частоту кадров без изменения их числа (в результате видео воспроизводиться быстрее или медленнее); если sync_audio имеет значение "истина", то частота дискретизации звука также меняется необходимым образом.
ChangeFPS
ChangeFPS(clip,new_fps)

Команда ChangeFPS изменяет частоту кадров удаляя или добавляя их для сохранения скорости воспроизведения.


Описание утилиты AVISynth.

Методы для работы с отдельными кадрами
FreezeFrame
FreezeFrame(clip,first-frame,last-frame,source-frame)

Фильтр FreezeFrame заменяет все кадры между firts-frame и last-frame копиями source-frame. Звуковая дорожка не изменяется. Фильтр удобен для покрытия проблемных кадров в видео в случае когда вы имеете похожие кадры не имеющие проблем.
DeleteFrame
DeleteFrame(clip,frame)

DeleteFrame удаляет один кадр, указанный аргументом. Звуковая дорожка не изменяется, так что если вы примените фильтр слишком много раз подряд то можете получить заметную десинхронизацию.

Если вы хотите удалить диапазон кадров (скажем от a до b) вместе с соответствующей частью фонограммы, это можно сделать примерно так: Trim(0,a-1) ++ Trim(b+1,0).
DuplicateFrame
DuplicateFrame(clip,frame)

Фильтр DuplicateFrame противоположен DeleteFrame - он дублирует один кадр указанный в аргументе. Как и в случае DeleteFrame звуковая дорожка не меняется.


Описание утилиты AVISynth.

H
HorizontalReduceBy2 / VerticalReduceBy2 / ReduceBy2
HorizontalReduceBy2(clip)
VerticalReduceBy2(clip)
ReduceBy2(clip)

Фильтр HorizontalReduceBy2 уменьшает горизонтальный размер кадра наполовину и VerticalReduceBy2 уменьшает вертикальный размер кадра наполовину. Применённые последовательно они уменьшат наполовину весь кадр (на четверть по площади). Псевдонимом такой последовательности является ReduceBy2

Фильтр использует значения пикселов с весами (1/4, 1/2, 1/4) те же, что и в фильтре VirtualDub 2:1 reduction (high quality), что позволяет избежать эффекта "лестницы" возникающего при весах (1/2, 1/2). VirtualDub "resize" использует третий набор весов для уменьшения 2:1, но эксперименты показали, что они дают выглядящие несколько хуже MPEG файлы - по-видимому причина в немного подчёркнутых границах, а большинство кодеков не любят четких границ.

Если источник - чересстрочный, VerticalReduceBy2 выполнит deinterlace как побочный эффект. Если вы планируете размер результирующего видео порядка 320x240, рекомендуется захватывать видео с полным чересстрочным размером (320x480) и использовать VerticalReduceBy2. Это даст выглядящий лучше результат. Кодек HuffYUV сжимает видео порядка 2:1 без потерь, и если позволяет система можно захватывать 640x480 и выполнять ReduceBy2. Однако при использовании MJPEG кодека преимущество в качестве будет невелико и может оказаться лучше использовать Huffyuv с размером кадра 320x480.


Описание утилиты AVISynth.

I
IPCSource
IPCSource("name")

IPCSource открывает коммуникационный канал с AVISynth-совместимым фрейм-сервером работающим в пространстве иного процесса на той же машине. IPC - сокращение от "inter-process communication" - меж-процессное взаимодействие. На текущий момент поддерживается только плагин для Premiere и FlasK. Возможно фрейм-сервер AVISynth будет сделан совместимым с VirtualDub, но на текущий момент этого нет. VDR файлы вы можете открывать командой AVISource.
Interleave
Interleave(clip,clip[,...])

Interleave чередует кадры из нескольких клипов по принципу кадр-за-кадром, так, к примеру, если вы дадите три аргумента, первые три кадры видеовыхода будут первыми кадрами трёх клипов источников, следующие три - вторыми кадрами видеоисточников и т.д..


Описание утилиты AVISynth.

Фильтры для обработки изображения
Levels
Levels(clip,input_low,gamma,input_high,output_low,output_high)

Фильтр Levels настраивает яркость, контраст и гамму. Параметры input_low и input_high определяют какое входное значение пикселя воспринимается как чисто чёрный и чисто белый; параметры output_low и output_high определяют выходные значения соответствующие чёрному и белому; и параметр gamma контролирует степень нелинейности в преобразовании. Более точно функция конвертации следующая:

output = [(input - input_low) / (input_high - input_low)]1/gamma (output_high - output_low) + output_low

Это один из фильтров, для которых на самом деле неплохо было бы иметь графический интерфейс (GUI). Так как сделать GUI не представляется возможным, фильтр сделан совместимым с аналогичным фильтром VirtualDub. Вы можете брать числа из диалога настройки фильтра "Levels" в VirtualDub и подставлять их в качестве параметров фильтра Levels в AVISynth получая те же результаты.

Работая в пространстве цвета YUY2, Levels выполняет корректировку только для яркостной составляющей, не для цветовой. Gamma-коррекция, вообще говоря, концепция цветового пространства RGB, и неясно, как выполнить её правильно в YUY2. Однако, если gamma=1.0, фильтр должен иметь одинаковый эффект как в RGB, так и в YUY2 режимах.

Примеры

# нулевой эффект
Levels 0,1,255,0,255

# gamma-корректировка для отображения в ярком окружении
Levels 0,1.3,255,0,255

# инвертирует изображение (делает фото-негатив)
Levels 0,1,255,255,0
Blur / Sharpen
Blur(clip,amount)
Sharpen(clip,amount)

Фильтр использует простую 3x3 размывающую или обостряющую матрицу весов пикселов. Наибольший допустимый аргумент для Blur около 1.58, который соответствует равномерному размытию 3x3 пикселя. Значение 1.0 даёт вам веса пикселов (1/4, 1/2, 1/4). Если вам требуется Гауссовское размытие большего радиуса, примените несколько копий Blur(1.0) последовательно.

Отрицательные значения для Blur на самом деле повышают резкость изображения, и фактически Sharpen просто псевдоним для Blur(- n). Наименьшее допустимое значение для Blur - -1.0, и наибольшее для Sharpen - 1.0
SpatialSoften / TemporalSoften
SpatialSoften(clip,radius,luma_threshold,chroma_threshold)
TemporalSoften(clip,radius,luma_threshold,chroma_threshold)

Фильтры SpatialSoften и TemporalSoften удаляют шум из видео-клипа выборочно смешивая пиксели. Это фильтры могут творить чудеса, и весьма рекомендуется попытаться использовать их. Но они также могут стереть мелкие детали если пороги слишком высоки, поэтому не перестарайтесь. И они очень медленны, особенно с большими значениями радиуса, поэтому не включайте их до тех пор, пока всё остальное не будет готово.

SpatialSoften заменяет каждый пиксель в кадре средним всех соседних выборок отличающихся от центральной выборки не более чем на указанное пороговое значение. "Соседний" значит пиксель не далее чем на +/- radius в направлениях X и Y. Пороги используются как luma_threshold для Y (яркостной составляющей) выборок, и chroma_threshold для U и V (цветовой составляющей) выборок.

TemporalSoften аналогичен, исключая то, что он просматривает один и тот же пиксель в соседних кадрах. Используются все кадры не далее чем на +/- radius отстоящие от центрального. Этот фильтр не выглядит столь же эффективным, как SpatialSoften.

Рекомендуется "поиграть" с параметрами для этих фильтров, чтобы получить представление о том, что они делают - к примеру попробуйте установить одному из трёх параметров очень высокое значение, оставляя другие с низким, и смотрите что выйдет. Помните, что установка любого из параметров в 0.0 станет причиной очень медленного ничего-ни-делания.

В AVISynth, SpatialSoften и TemporalSoften работают только в пространстве цвета YUY2. Можно использовать ConvertToYUY2 фильтр если исходный видео-клип не в YUY2 формате.
FixLuminance
FixLuminance(clip,intercept,slope)

Видеомагнитофон иногда имеет раздражающую привычку повышать яркость снизу в верх у каждого кадра. Цель этого фильтра последовательное затемнение верха изображения для компенсации. Если с вашим видеомагнитофоном всё в порядке, можете считать что этого фильтра нет.

Этот фильтр работает только в цветовом пространстве YUY2.
FixBrokenChromaUpsampling
FixBrokenChromaUpsampling(clip)

Замечено, что MS DV кодек обрабатывает цветовые каналы неверно, что может быть компенсировано фильтром FixBrokenChromaUpsampling. Вы должны поместить его после DirectShowSource, в случае использования MS DV кодека, или если вы заметите грязные линии появляющиеся в чересстрочных изображениях.
Letterbox
Letterbox(clip,top,bottom)

Letterbox просто зачерняет верхние top и нижние bottom строки каждого кадра. Фильтр применим в двух случаях: во-первых он может убрать паразитный шум видео с существующих чёрных полос изображения; во-вторых он может убрать замусоренные строки, часто возникающие внизу кадра при захвате с плёнок VHS

Действие Letterbox может быть повторено комбинацией фильтров Crop и AddBorders, но Letterbox быстрее и проще

Обычно, лучше обрезать фильтром Crop или CropBottom чем прятать используя Letterbox. Однако, в некоторых случаях, особенно если вы кодируете в MPEG, лучше использовать Letterbox, что позволяет сохранять стандартные размеры кадра, такие как 352x288 или 320x240. Некоторые MPEG проигрыватели не понимают видео имеющее нестандартный размер кадра.
Subtitle
Subtitle(clip,"text",x,y,first-frame,last-frame,"font-name",point-size[,text-color[,halo-color]])
Subtitle(clip,"text")

Фильтр Subtitle добавляет строку сглаженного текста в последовательность кадров. Если вы желаете более одно субтитра, или субтитр содержащий более одной строки, вы должны сцепить вместе несколько фильтров Subtitle. Этот фильтр очевидно неприменим для чего-то большего, чем случайное использование.

Цвет текста и ореола должны быть заданы как шестнадцатеричное RGB значение, как в HTML, не считая того, что начинается оно с $ вместо #. (# Используется для комментирования).

Альтернативная, краткая форма полезна когда вас не беспокоит, как выглядят субтитры до тех пор, пока вы их видите. К примеру, когда вы используете фильтр StackVertical, который покажет несколько вариантов кадра сразу, и желаете пометить их, чтобы помнить что есть что.

AVISynth использует фильтр внутри для метода Version и для вывода сообщений об ошибках. Ещё механизм субтитров используется в ShowFrameNumber.
PeculiarBlend
PeculiarBlend(clip,cutoff)

Фильтр смешивает каждый кадр с последующим особым образом. Часть кадра ниже cutoff строк не изменяется. Часть выше cutoff-30 строк заменяется соответствующей частью следующего кадра. 30 строк в середине смешиваются последовательно, чтобы скрыть переключение кадров.

Может возникнуть вопрос, кому нужен этот фильтр. Что ж, дело вот в чём. Ко многим видео-клипам исходно снятым на плёнку применена техника 3:2 pulldown, описанная в описании фильтра Pulldown. Однако некоторые используют более неприятную систему в которой пересечение со следующим кадром происходит в середине поля. Другими словами индивидуальные поля как один кадр фильма вверху и другой внизу. Этот специфический эффект фильтр частично исправляет. Он должен использоваться после или до фильтра Pulldown. Чтобы определить cutoff, изучите смешанный таким образом кадр и установите cutoff в номер первой строки, где вы заметите смешивание.

В AVISynth, фильтр работает только в пространстве цветов YUY2. Можно использовать фильтр ConvertToYUY2 если источник не YUY2.


Описание утилиты AVISynth.

Фильтры для работы с черезстрочным видео
AssumeFrameBased / AssumeFieldBased
AssumeFrameBased(clip)
AssumeFieldBased(clip)

AVISynth следит, является клип основанным на полях или кадрах. Если клип основан на полях, то также сохраняется соотношение каждого поля (какое оно, верхние или нижнее поле кадра). Если клип основан на кадрах, то сохраняется порядок полей в кадре (т.е. какое поле в кадре идёт первым, когда они разделяются)

Однако эта информация необязательно верна, так как информация о полях обычно не хранится в видео-файлах и AVISynth методы источники только предполагают её. AssumeFrameBased и AssumeFieldBased позволяют вам сказать AVISynth истинный тип клипа.

AssumeFrameBased выбрасывает существующую информацию и считает, что клип является основанным на кадрах, с нижним (чётным) полем первым в каждом кадре. (Метод-источник делает так). Если вы желаете верхнее поле быть первым, используйте после ComplementParity.

AssumeFieldBased выбрасывает существующую информацию и считает, что клип является основанным на полях, с четными полями внизу и нечётными полями вверху. Если вы хотите расположить их наоборот, используйте после ComplementParity.
ComplementParity
ComplementParity(clip)

Если клип основан на полях, ComplementParity меняет верхние поля на нижние и наоборот. Если клип основан на кадрах, фильтр изменяет порядок полей в кадре (нижнее -> первое на верхнее -> первое и наоборот).
SeparateFields
SeparateFields(clip)

NTSC и PAL видеосигналы это последовательности полей, но все известные карты захвата видео захватывают два поля сразу и "interlace" - чередуют (или "weave" - сплетают) их в кадры. Так кадр 0 в захваченном файле содержит поля 0 и 1; кадр 1 содержит поля 2 и 3; и т.д. SeparateFields берёт основанный на кадрах клип и разделяет каждый кадр на составляющие его поля, формируя новый клип с удвоенной частотой и числом кадров. Это полезно, если вы хотите использовать Trim и тому подобные фильтры с точностью до одного поля.

SeparateFields использует информацию о порядке полей клипа источника для решения которое из каждой пары полей выводится первым. Если порядок неверен, используйте ComplementParity перед SeparateFields. Если результат все равно неверен, возможно стоит использовать также и AssumeFrameBased

Фильтр ничего не делает, если клип уже основан на полях.
Weave
Weave(clip)

Фильтр Weave противоположен SeparateFields. Он берёт пары полей исходного видео-клипа и соединяет их вместе для создания чересстрочных кадров. Новый клип имеет уменьшенные на половину частоту кадров и их число. Weave использует информацию о соответствии кадров клипа источника решая какое поле расположить наверху. Если порядок неверен используйте ComplementParity до или SwapFields после.

Все фильтры AVISynth сохраняют информацию о последовательности полей, ты что Weave всегда объединит поля вместе в правильном порядке. Если вы хотите изменить его, используйте ComplementParity до или SwapFields после.

Фильтр ничего не делает, если клип уже основан на кадрах.
DoubleWeave
DoubleWeave(clip)

Если клип источник основан на полях, фильтр DoubleWeave ведёт себя как Weave, исключая то, что он формирует удвоенное число кадров вместо того, чтобы объединять поля 0 и 1 в кадр 0, поля 2 и 3 в кадр 1 и т.д., он объединяет поля 0 и 1 в кадр 0, поля 1 и 2 в кадр 1 и т.д.. Он не изменяет частоту кадров или их количество.

Если клип источник основан на кадрах, фильтр действует как если бы вы разделили его вначале на поля используя SeparateFields

Weave фактически просто псевдоним для DoubleWeave следующим за SelectEven

Более вероятно вы захотите использовать фильтр типа SeleceOdd или Pulldown после применения этого фильтра, если вы действительно не хотите видео с частотой кадров 50 или 60. Может выглядеть неэффективным чередовать каждую пару полей только чтобы немедленно выбросить половину получившихся кадров, Но фактически, так как AVISynth генерирует кадры только по требованию, ненужные кадры никогда не будут сгенерированы.

Если вы используете видео основанное на полях, такое как отснятое видео- камерой, вам вероятно не нужен этот фильтр. Но если вы обрабатываете NTSC видео конвертированное из FILM и планируете использовать фильтр Pulldown, вам необходимо вначале использовать DoubleWeave. Смотрите фильтр Pulldown для объяснений.

Если вы обрабатываете PAL видео конвертированное из FILM, Pulldown вам не нужен, но вы можете захотеть использовать DoubleWeave в следующей ситуации:
# Повторить функциональность фильтра VirtualDub "PAL deinterlace"
DoubleWeave
SelectOdd
Bob
Bob(clip[,b,c][,height])

Bob берёт клип и убирает "гребёнку" следующим образом. Фильтр увеличивает каждое поля до размеров целого кадра интерполяцией между строками. Верхнее поле немного сдвигается вверх в сравнении с нижним, так что картинка на самом деле не прыгает вверх-вниз. Однако, она начинает "мерцать" на стационарных сценах, так как интерполяция на самом деле не восстанавливает другое поле достаточно точно.

Фильтр использует BicubicResize для грязной работы. Вы можете указывать ему значения b и с. Также вы можете воспользоваться случаем изменить вертикальное разрешение параметром height.
SwapFields
SwapFields(clip)

Фильтр SwapFields меняет местами строку 0 со строкой 1, строку 2 со строкой 3 и т.д., что эффективно меняет местами два поля в чересстрочном кадре. Тоже самое делает SeparateFields.ComplementParity.Weave (и именно так фильтр реализован).


Описание утилиты AVISynth.

L
Letterbox
Letterbox(clip,top,bottom)

Letterbox просто зачерняет верхние top и нижние bottom строки каждого кадра. Фильтр применим в двух случаях: во-первых он может убрать паразитный шум видео с существующих чёрных полос изображения; во-вторых он может убрать замусоренные строки, часто возникающие внизу кадра при захвате с плёнок VHS

Действие Letterbox может быть повторено комбинацией фильтров Crop и AddBorders, но Letterbox быстрее и проще

Обычно, лучше обрезать фильтром Crop или CropBottom чем прятать используя Letterbox. Однако, в некоторых случаях, особенно если вы кодируете в MPEG, лучше использовать Letterbox, что позволяет сохранять стандартные размеры кадра, такие как 352x288 или 320x240. Некоторые MPEG проигрыватели не понимают видео имеющее нестандартный размер кадра.
Levels
Levels(clip,input_low,gamma,input_high,output_low,output_high)

Фильтр Levels настраивает яркость, контраст и гамму. Параметры input_low и input_high определяют какое входное значение пикселя воспринимается как чисто чёрный и чисто белый; параметры output_low и output_high определяют выходные значения соответствующие чёрному и белому; и параметр gamma контролирует степень нелинейности в преобразовании. Более точно функция конвертации следующая:

output = [(input - input_low) / (input_high - input_low)]1/gamma (output_high - output_low) + output_low

Это один из фильтров, для которых на самом деле неплохо было бы иметь графический интерфейс (GUI). Так как сделать GUI не представляется возможным, фильтр сделан совместимым с аналогичным фильтром VirtualDub. Вы можете брать числа из диалога настройки фильтра "Levels" в VirtualDub и подставлять их в качестве параметров фильтра Levels в AVISynth получая те же результаты.

Работая в пространстве цвета YUY2, Levels выполняет корректировку только для яркостной составляющей, не для цветовой. Gamma-коррекция, вообще говоря, концепция цветового пространства RGB, и неясно, как выполнить её правильно в YUY2. Однако, если gamma=1.0, фильтр должен иметь одинаковый эффект как в RGB, так и в YUY2 режимах.

Примеры

# нулевой эффект
Levels 0,1,255,0,255

# gamma-корректировка для отображения в ярком окружении
Levels 0,1.3,255,0,255

# инвертирует изображение (делает фото-негатив)
Levels 0,1,255,255,0
LoadPlugin / LoadVirtualdubPlugin / LoadVFAPIPlugin
LoadPlugin("plugin-file-name"[,...])
LoadVFAPIPlugin("plugin-file-name", "new-command-name")
LoadVirtualdubPlugin("plugin-file-name", "new-command-name", prelol)

LoadPlugin передаётся аргумент, являющийся именем файл с исполняемым кодом подключаемого фильтра совместимого с AVISynth. После загрузки, становятся доступны новые команды реализуемые данным подгружаемым фильтром. Загруженные фильтры способны работать в цветовых пространствах YUY2 и RGB.

В методы LoadVFAPIPlugin и LoadVirtualdubPlugin загружают плагины TMPGEnc и VirtualDub соответственно. Загруженный фильтр будет доступен под указанным именем может работать только в цветовом пространстве RGB. Поэтому менее удобен нежели LoadPlugin.

Некоторые фильтры VirtualDub загруженные посредством LoadVirtualdubPlugin зависят от предыдущих кадров; для таких фильтров prelol должен быть не меньше числа кадров которые фильтру необходимых предварительно обработать для заполнения его буферов и обновления внутренних переменных. Удобный интерфейс в стиле AVISynth ко многим фильтрам VirtualDub можно найти в файле vdfilters.avs включённом в дистрибутив AVISynth (хотя этот файл несколько устарел). Для его использования исправьте переменную VirtualDub_plugin_directory в начале файла чтобы она содержала путь к папке содержащей плагины VirtualDub и включите этот файл в свой скрипт (посредством метода Import).

Примеры

# Загрузка фильтра выполняющего IVTC и его вызов
LoadPlugIn("q:\InverseTelecine.dll")
SegmentedAviSource("D:\capture.avi")
InverseTelecine(40,10,15)

# Загрузка фильтра VirtualDub "Smart Smoother", автор Donald Graft

LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\smooth.vdf", "_VD_SmartSmoother", 1)
SegmentedAviSource("D:\capture.avi")
_VD_SmartSmoother(default(diameter,5), default(threshold,25), default(interlaced,false)?1:0)


Описание утилиты AVISynth.

M
MessageClip
MessageClip("message",width,height,shrink,text_color,halo_color,bg_color)

MessageClip формирует клип содержащий текстовое сообщение. Метод используется внутренне для сообщения об ошибках. Используется фонт Arial, размер между 24 и 9 пунктов выбирается для лучшего сочетания, если возможно, ширины и высоты. Если shrink имеет значение "истина", то разрешение клипа уменьшается, если необходимо, чтобы соответствовать тексту.


Описание утилиты AVISynth.

Мета-фильтры
Animate
Animate(start-frame,end-frame,"filter",start-args,end-args)

Animate это мета-фильтр, который вычисляет свой параметр filter с непрерывно изменяемыми аргументами. В кадре start-frame и ранее, фильтр вычисляется с аргументами заданными в start-args. В кадре end-frame и позднее, фильтр вычисляется с аргументами заданными в end-args. В середине, аргументы линейно интерполируются для гладкого перехода.

Аргумент filter должен быть заключён в символы цитирования, и два вложенных списка аргументов не заключены в скобки. Строки и видео-клипы не могут интерполироваться, и значит должны совпадать в обоих списках аргументов. Вы не можете использовать запись в стиле ООП или предполагать last в этом filter, даже если обычно filter позволяет такое в своих аргументах.

Фильтр некорректно обрабатывает изменение звуковой дорожки, так что не рекомендуется применять его с фильтрами(filter) которые её изменяют. И во имя неба не давайте начальных и конечных параметров приводящих к различным размерам кадра.

Аргумент filter может также быть Animate если вы хотите квадратичную, а не линейную интерполяцию, но если об этом слишком много думать, то голова может разлететься.

Примеры

# Сделать скроллинг для "Version" видео

ver = Version()
return Animate(0,149,"Crop",ver,0,0,64,32,ver,448,0,64,32)

# Растворить(Fade) в белое

Animate(100,200,"Levels",last,0,1,255,0,255,last,0,1,255,255,255)

# Выполнить постепенное увеличение из центра видео 320x240,
# начиная с увеличения 1:1 в кадре 100 и кончая увеличением
# 4:1 в кадре 200

Animate(100,200, "BicubicResize",last,0,0,320,240,320,240,last,120,90,80,60,320,240)

# Сделать текст "Hello, World!" увеличивающимся из центра видео 320x240

Animate(0,48,"Subtitle",last,"Hello, World!",160,120,0,99999,"Arial",last,0,"Hello, World!",25,130,0,99999,"Arial",48)


Описание утилиты AVISynth.

O
AVISource / OpenDMLSource / AVIFileSource / WAVSource
AVISource("filename")
OpenDMLSource("filename")
AVIFileSource("filename")
WAVSource("filename")

AVISource передаётся один аргумент, являющийся именем файла в кавычках. Метод пытается считать этот файл используя либо интерфейс "Video-for-Windows" либо встроенный OpenDML код (перенесённый из VirtualDub). Фильтр способен загрузить любой файл, для которого существует AVIFile обработчик. Сюда включаются не только AVI файлы, но и WAV, AVS (скрипт AVISynth) и VDR (фрейм-сервер VirtualDub).

Метод AVISource определяет тип файла и вызывает наиболее соответствующий AVIFile или OpenDML обработчик. В случае, если открыть файл таким образом не удаётся, можно использовать OpenDMLSource или AVIFileSource, явно указывая какой тип обработчика использовать. Оба фильтра способны читать обычные (>2GB) AVI файлы. Но только через OpenDML можно работать с файлами большего размера, и только AVIFile открывает не AVI файлы (WAV, VDR, AVS).

Примеры

AVISource("d:\capture.avi") # Замечание C-программистам: обратный слеш не дублируется.
AVISource("c:/capture/00.avi") # прямой слеш также работает
AVISource("f:\soundtrack.wav") # это работает
WAVSource("f:\soundtrack.wav") # и это тоже


Описание утилиты AVISynth.

P
PeculiarBlend
PeculiarBlend(clip,cutoff)

Фильтр смешивает каждый кадр с последующим особым образом. Часть кадра ниже cutoff строк не изменяется. Часть выше cutoff-30 строк заменяется соответствующей частью следующего кадра. 30 строк в середине смешиваются последовательно, чтобы скрыть переключение кадров.

Может возникнуть вопрос, кому нужен этот фильтр. Что ж, дело вот в чём. Ко многим видео-клипам исходно снятым на плёнку применена техника 3:2 pulldown, описанная в описании фильтра Pulldown. Однако некоторые используют более неприятную систему в которой пересечение со следующим кадром происходит в середине поля. Другими словами индивидуальные поля как один кадр фильма вверху и другой внизу. Этот специфический эффект фильтр частично исправляет. Он должен использоваться после или до фильтра Pulldown. Чтобы определить cutoff, изучите смешанный таким образом кадр и установите cutoff в номер первой строки, где вы заметите смешивание.

В AVISynth, фильтр работает только в пространстве цветов YUY2. Можно использовать фильтр ConvertToYUY2 если источник не YUY2.
Pulldown
Pulldown(clip,a,b)

Фильтр Pulldown просто выбирает два из каждых пяти кадров видеоисточника. Частота кадров уменьшается к двум третьим своего исходного значения. К примеру, Pulldown 0, 2 выберет кадры 0,2,5,7,10,12 и т.д.

Разработан для использования после DoubleWeave, и его цель - восстановление исходной частоты кадров фильма который был конвертирован в видео с применением процесса "3:2 pulldown".

Причина, по которой необходимо в начале использовать DoubleWeave в том, что карты захвата соединяют поля неверным образом. В терминах полей, последовательность 3:2 pulldown просто "A A B B B C C D D D ...", где символы с "A" по "D" представляют исходные кадры фильма. Но карты захвата соединяют поля в кадры без соблюдения структуры "3:2 pulldown", и в результате получается вот что:

A   B   C   D   D    (30fps)
A   B   B   C   D

В такой структуре кадр "C" никогда сам не возникает. После DoubleWeave каждая пара полей приобретает её собственный кадр, так что видео поток начинается так:

A A B B C C D D D    (60fps)
A B B B B C C D D
*     *   *     *

Теперь каждый кадр фильма имеет как минимум один свой кадр видео. В этом месте фильтр Pulldown с аргументами 0, 3 выберет кадры отмеченные "*" и вы получите

A     B   C     D    (24fps)
A     B   C     D

... то, что вам действительно нужно.

Очень сложно объяснить, но восстановление после "3:2 pulldown" это просто вопрос вставки шаблонного кода. Посмотрите приме для ShowFiveVersions.

Pulldown(a,b) внутренне реализован как SelectEvery(5,a,b).AssumeFrameBased.


Описание утилиты AVISynth.

Подгружаемые фильтры
LoadPlugin / LoadVirtualdubPlugin / LoadVFAPIPlugin
LoadPlugin("plugin-file-name"[,...])
LoadVFAPIPlugin("plugin-file-name", "new-command-name")
LoadVirtualdubPlugin("plugin-file-name", "new-command-name", prelol)

LoadPlugin передаётся аргумент, являющийся именем файл с исполняемым кодом подключаемого фильтра совместимого с AVISynth. После загрузки, становятся доступны новые команды реализуемые данным подгружаемым фильтром. Загруженные фильтры способны работать в цветовых пространствах YUY2 и RGB.

В методы LoadVFAPIPlugin и LoadVirtualdubPlugin загружают плагины TMPGEnc и VirtualDub соответственно. Загруженный фильтр будет доступен под указанным именем может работать только в цветовом пространстве RGB. Поэтому менее удобен нежели LoadPlugin.

Некоторые фильтры VirtualDub загруженные посредством LoadVirtualdubPlugin зависят от предыдущих кадров; для таких фильтров prelol должен быть не меньше числа кадров которые фильтру необходимых предварительно обработать для заполнения его буферов и обновления внутренних переменных. Удобный интерфейс в стиле AVISynth ко многим фильтрам VirtualDub можно найти в файле vdfilters.avs включённом в дистрибутив AVISynth (хотя этот файл несколько устарел). Для его использования исправьте переменную VirtualDub_plugin_directory в начале файла чтобы она содержала путь к папке содержащей плагины VirtualDub и включите этот файл в свой скрипт (посредством метода Import).

Примеры

# Загрузка фильтра выполняющего IVTC и его вызов
LoadPlugIn("q:\InverseTelecine.dll")
SegmentedAviSource("D:\capture.avi")
InverseTelecine(40,10,15)

# Загрузка фильтра VirtualDub "Smart Smoother", автор Donald Graft

LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\smooth.vdf", "_VD_SmartSmoother", 1)
SegmentedAviSource("D:\capture.avi")
_VD_SmartSmoother(default(diameter,5), default(threshold,25), default(interlaced,false)?1:0)


Описание утилиты AVISynth.

R
ResampleAudio
ResampleAudio(clip,new-sample-rate)

Метод ResampleAudio проводит высококачественное изменение частоты дискретизации аудио.
HorizontalReduceBy2 / VerticalReduceBy2 / ReduceBy2
HorizontalReduceBy2(clip)
VerticalReduceBy2(clip)
ReduceBy2(clip)

Фильтр HorizontalReduceBy2 уменьшает горизонтальный размер кадра наполовину и VerticalReduceBy2 уменьшает вертикальный размер кадра наполовину. Применённые последовательно они уменьшат наполовину весь кадр (на четверть по площади). Псевдонимом такой последовательности является ReduceBy2

Фильтр использует значения пикселов с весами (1/4, 1/2, 1/4) те же, что и в фильтре VirtualDub 2:1 reduction (high quality), что позволяет избежать эффекта "лестницы" возникающего при весах (1/2, 1/2). VirtualDub "resize" использует третий набор весов для уменьшения 2:1, но эксперименты показали, что они дают выглядящие несколько хуже MPEG файлы - по-видимому причина в немного подчёркнутых границах, а большинство кодеков не любят четких границ.

Если источник - чересстрочный, VerticalReduceBy2 выполнит deinterlace как побочный эффект. Если вы планируете размер результирующего видео порядка 320x240, рекомендуется захватывать видео с полным чересстрочным размером (320x480) и использовать VerticalReduceBy2. Это даст выглядящий лучше результат. Кодек HuffYUV сжимает видео порядка 2:1 без потерь, и если позволяет система можно захватывать 640x480 и выполнять ReduceBy2. Однако при использовании MJPEG кодека преимущество в качестве будет невелико и может оказаться лучше использовать Huffyuv с размером кадра 320x480.

Reverse
Reverse(clip)

Фильтр делает клип играющий в обратном направлении. Это применимо для наблюдения идущих задом наперед людей, во время прослушивания скрытых сатанинских посланий.


Описание утилиты AVISynth.

Методы для загрузки или создания видео-клипов
AVISource / OpenDMLSource / AVIFileSource / WAVSource
AVISource("filename")
OpenDMLSource("filename")
AVIFileSource("filename")
WAVSource("filename")

AVISource передаётся один аргумент, являющийся именем файла в кавычках. Метод пытается считать этот файл используя либо интерфейс "Video-for-Windows" либо встроенный OpenDML код (перенесённый из VirtualDub). Фильтр способен загрузить любой файл, для которого существует AVIFile обработчик. Сюда включаются не только AVI файлы, но и WAV, AVS (скрипт AVISynth) и VDR (фрейм-сервер VirtualDub).

Метод AVISource определяет тип файла и вызывает наиболее соответствующий AVIFile или OpenDML обработчик. В случае, если открыть файл таким образом не удаётся, можно использовать OpenDMLSource или AVIFileSource, явно указывая какой тип обработчика использовать. Оба фильтра способны читать обычные (>2GB) AVI файлы. Но только через OpenDML можно работать с файлами большего размера, и только AVIFile открывает не AVI файлы (WAV, VDR, AVS).

Примеры

AVISource("d:\capture.avi") # Замечание C-программистам: обратный слеш не дублируется.
AVISource("c:/capture/00.avi") # прямой слеш также работает
AVISource("f:\soundtrack.wav") # это работает
WAVSource("f:\soundtrack.wav") # и это тоже
DirectShowSource
DirectShowSource("filename" [, FPS])

DirectShowSource читает filename используя DirectShow, та же система воспроизведения мультимедиа файлов, что используется в Windows Media Player. Метод может загрузить большинство форматов проигрываемых Windows Media Player, в том числе MPEG, MP3 и QuickTime, также как и AVI файлы не поддерживаемые AVISource (например DV type 1 или файлы использующие только DirectShow кодеки). Попытайтесь считать AVI файлы сначала посредством AVISource и если не сработает поменяйте на DirectShowSource
    Несколько предостережений:
  • Звук пока не поддерживается.
  • GRF файлы не поддерживаются (возможно поддержка появиться в следующих версиях).
  • Некоторые декодеры (замечено с MS MPEG-4) формирует видео кверх-ногами. Вам потребуется использовать FlipVertical.
  • От DirectShow видео-декодеров не требуется поддерживать точное, покадровое позиционирование и большинство не делают этого. Пока вы просто читаете видео последовательно, всё должно быть в порядке, но да помогут вам небеса, если вы пожелаете чего-то более сложного. Это ограничение не относиться к AVI файлам, или любым другим форматам которые имеют покадрово-точный DirectShow декодер.
  • От DirectShow видео-декодеров даже не сообщать вам частоту кадров входящего видео. Большинство сообщают, но ASF декодер нет. Возможно как-нибудь эта проблема решиться авто-анализом потока (как делал VirtualDub), но сейчас вы должны задавать частоту кадров, например DirectShowSource("video.asf", fps=15).
SegmentedAVISource / SegmentedDirectShowSource
SegmentedAVISource("base-filename"[,...])
SegmentedDirectShowSource("base-filename"[,...][,fps])

Метод SegmentedAVISource автоматически загрузит до 100 AVI файлов (используя AVISource) и склеит их вместе (используя UnalignedSplice). Если d:\filename.ext используется в качестве аргумента, то будут загружены файлы d:\filename.00.ext, d:\filename.01.ext и т.д. до d:\filename.99.ext. Несуществующие файлы этой последовательности буду опущены.

SegmentedDirectShowSource работает аналогично.
IPCSource
IPCSource("name")

IPCSource открывает коммуникационный канал с AVISynth-совместимым фрейм-сервером работающим в пространстве иного процесса на той же машине. IPC - сокращение от "inter-process communication" - меж-процессное взаимодействие. На текущий момент поддерживается только плагин для Premiere и FlasK. Возможно фрейм-сервер AVISynth будет сделан совместимым с VirtualDub, но на текущий момент этого нет. VDR файлы вы можете открывать командой AVISource.
Blackness / BlankClip
Blackness(clip,duration)
BlankClip(template-clip, length,width,height,pixel_type,fps,fps_denominator,audio_rate,stereo,sixteen_bit,color)

Метод BlankClip формирует одноцветный, беззвучный видео-клип указанной длительности (в кадрах). Клип переданный в качестве параметров используется в качестве шаблона для частота кадров, размер кадра т.д.), но вы можете задать все параметры клипа без указания шаблона. Цвет должен быть задан как шестнадцатеричное RGB значение. Без аргументов BlankClip формирует чёрный десяти-секундный клип, 640x480, 24 FPS, 16 bit 44100 Hz стерео.

Blackness это псевдоним BlankClip, внесённый для обратной совместимости.
ColorBars
ColorBars(width,height)

Метод ColorBars формирует видео-клип, содержащий цветные полосы SMPTE масштабированные к любому размеру изображения. Формируется клип RGB, 29.97 FPS, длительностью 1 час.
MessageClip
MessageClip("message",width,height,shrink,text_color,halo_color,bg_color)

MessageClip формирует клип содержащий текстовое сообщение. Метод используется внутренне для сообщения об ошибках. Используется фонт Arial, размер между 24 и 9 пунктов выбирается для лучшего сочетания, если возможно, ширины и высоты. Если shrink имеет значение "истина", то разрешение клипа уменьшается, если необходимо, чтобы соответствовать тексту.
Version
Version()

Метод Version создаёт видео-клип 476x104, 24 FPS, 10 секунд, формат RGB с краткой информацией по AVISynth зелёным 24-пункта Arial шрифтом.


Описание утилиты AVISynth.

Фильтры изменяющие размер кадра
HorizontalReduceBy2 / VerticalReduceBy2 / ReduceBy2
HorizontalReduceBy2(clip)
VerticalReduceBy2(clip)
ReduceBy2(clip)

Фильтр HorizontalReduceBy2 уменьшает горизонтальный размер кадра наполовину и VerticalReduceBy2 уменьшает вертикальный размер кадра наполовину. Применённые последовательно они уменьшат наполовину весь кадр (на четверть по площади). Псевдонимом такой последовательности является ReduceBy2

Фильтр использует значения пикселов с весами (1/4, 1/2, 1/4) те же, что и в фильтре VirtualDub 2:1 reduction (high quality), что позволяет избежать эффекта "лестницы" возникающего при весах (1/2, 1/2). VirtualDub "resize" использует третий набор весов для уменьшения 2:1, но эксперименты показали, что они дают выглядящие несколько хуже MPEG файлы - по-видимому причина в немного подчёркнутых границах, а большинство кодеков не любят четких границ.

Если источник - чересстрочный, VerticalReduceBy2 выполнит deinterlace как побочный эффект. Если вы планируете размер результирующего видео порядка 320x240, рекомендуется захватывать видео с полным чересстрочным размером (320x480) и использовать VerticalReduceBy2. Это даст выглядящий лучше результат. Кодек HuffYUV сжимает видео порядка 2:1 без потерь, и если позволяет система можно захватывать 640x480 и выполнять ReduceBy2. Однако при использовании MJPEG кодека преимущество в качестве будет невелико и может оказаться лучше использовать Huffyuv с размером кадра 320x480.

BilinearResize
BilinearResize(clip,target-width,target-height)
BilinearResize(clip,source-left,source-top,source-width,source-height,target-width,target-height)

Фильтр BilinearResize масштабирует кадры входного видео к произвольному новому размеру. Передача необязательных параметров даст в результате тот же результат, как если бы к видео-клипу был применён Crop с этими аргументами до BilinearResize (только быстрее).

BilinearResize использует стандартную билинейную фильтрации. И практически идентичен фильтру VirtualDub "resize [precise bilinear]". Отличие в том, что фильтр VirtualDub похоже берёт не совсем верный масштабный коэффициент. В результате пиксели на верхней и правой границе обрезаются либо дублируются. Ошибка становиться заметна при увеличении вдвое или больше, но в других случаях несущественна.

Примеры

# Загрузить видео-файл и отмасштабировать к 240x180 (с исходного размера)
AVISource("video.avi").BilinearResize(240,180)

# Загрузить 720x480 (CCIR601) видео и отмасштабировать к 252x240 (VCD), сохраняя соотношение сторон
AVISource("dv.avi").BilinearResize(8,0,704,480,352,240)

# Извлечь верхний правый квадрант видео-клипа 320x240 и увеличить его до размеров всего кадра
BilinearResize(160,0,160,120,320,240)
BicubicResize
BicubicResize(clip,target-width,target-height[,b,c])
BicubicResize(clip,target-width,target-height,b,c,source-left,source-top,source-width,source-height)

BicubicResize аналогичен BilinearResize, не считая замены линейной фильтрации на Митчелла-Нетравали двухпараметрическую кубическую. Параметры b и c могут быть использованы для настройки свойств кривой. С b=0 и c=0.75 фильтр работает идентично фильтру VirtualDub "resize [precise bicubic]" и результат одинаков, с учётом проблемы масштабного коэффициента описанной в BilinearResize. Значения по умолчанию: b=1/3 и c=1.3 рекомендованы Митчеллом и Нетравали как дающие наиболее визуально приятные результаты для человека в субъективных тестах. Большие значения b и c дают интересные эффекты, например попробуйте b=0 и c=-5.

При увеличении размера кадра, BicubicResize даёт результаты выглядящие значительно лучше нежели BilinearResize. Однако при уменьшении результаты сблизятся или у BilinearResize будет даже лучше. Несмотря на то, что бикубический фильтр VirtualDub даёт изображение, которое выглядит лучше чем билинейный, это в основном за счёт подчёркивания границ бикубическим фильтром, а не результат лучшей выборки. Чёткое изображение хорошо, пока вы не попытаетесь его сжать. В этот момент они очень быстро начнут раздражать вас. BicubicResize по умолчанию не подчёркивает границ так сильно, как бикубический в VirtualDub, но все же подчёркивает сильнее чем билинейный. Если вы планируете кодировать видео с низким битрейтом, не удивляйтесь, если BilinearResize даст лучшее качество
Crop / CropBottom
Crop(clip,left,top,width,height)
CropBottom(clip,count)

Crop обрезает лишние пиксели с границ каждого кадра. Если источник имеет размер 720x480, а вы хотите уменьшить его до 352x240 для VideoCD, то следует использовать код
# Преобразовать CCIR601 в VCD, с сохранением верного соотношения сторон
ReduceBy2
Crop(4,0,352,240)

Пространство цвета YUY2 хранит цветовую информацию для двух пикселей по горизонтали, таким образом, работая в режиме YUY2, left и width должны быть чётными.

Альтернативный фильтр CropBottom полезен для обрезания мусор снизу видео-клипа захваченного с VHS кассеты. Он убирает count линий снизу каждого кадра
AddBorders
AddBorders(clip,left,top,right,bottom)

AddBorders добавляет чёрные границы по краям изображения, которые имеют указанную ширину (в пикселях). Пространство цвета YUY2 хранит цветовую информацию для двух пикселей по горизонтали, таким образом, работая в режиме YUY2, left и right должны быть чётными.

Помните, что многие алгоритмы сжатия с потерями плохо работают с одноцветными границами, если их размер не кратен размеру блока (16 пикселов для MPEG)

Вы можете использовать этот фильтр в комбинации с Crop для смещения изображения без изменения размера кадра. К примеру:
# Сместить 352x240 изображение на 2 пикселя вправо
Crop(0,0,350,240).AddBorders(2,0,0,0)


Описание утилиты AVISynth.

S
SegmentedAVISource / SegmentedDirectShowSource
SegmentedAVISource("base-filename"[,...])
SegmentedDirectShowSource("base-filename"[,...][,fps])

Метод SegmentedAVISource автоматически загрузит до 100 AVI файлов (используя AVISource) и склеит их вместе (используя UnalignedSplice). Если d:\filename.ext используется в качестве аргумента, то будут загружены файлы d:\filename.00.ext, d:\filename.01.ext и т.д. до d:\filename.99.ext. Несуществующие файлы этой последовательности буду опущены.

SegmentedDirectShowSource работает аналогично.
SelectEven / SelectOdd
SelectEven(clip)
SelectOdd(clip)

SelectEven делает выходной видео-поток используя только кадры входного видео-потока с чётными номерами. SelectOdd - его нечётное дополнение.

Так как кадры нумеруются с нуля, SelectEven фактически выбирает первый, третий, пятый, ... кадры по человеческому соглашению счёта.
SelectEvery
SelectEvery(clip,step-size[,offset1[,offset2[,...]]])

SelectEvery это обобщение таких фильтров, как SelectEven и Pulldown. Проще всего описать фильтр на примере:
SelectEvery(clip,2,0) # идентично SelectEven(clip)
SelectEvery(clip,2,1) # идентично SelectOdd(clip)
SelectEvery(clip,10,3,6,7) # выбрать кадры 3,6,7,13,16,17,23,26,27... из клипа источника
SelectEvery(clip,9) # выбрать кадры 0,9,18,27,... (второй аргумент предполагается равным 0)

Или вот так
# Взять прогрессивный клип 24FPS и применить "3:2 pulldown"
# получая на выходе чересстрочный клип 30FPS
AssumeFrameBased
SeparateFields
SelectEvery(8, 0,1, 2,3,2, 5,4, 7,6,7)
Weave
SeparateFields
SeparateFields(clip)

NTSC и PAL видеосигналы это последовательности полей, но все известные карты захвата видео захватывают два поля сразу и "interlace" - чередуют (или "weave" - сплетают) их в кадры. Так кадр 0 в захваченном файле содержит поля 0 и 1; кадр 1 содержит поля 2 и 3; и т.д. SeparateFields берёт основанный на кадрах клип и разделяет каждый кадр на составляющие его поля, формируя новый клип с удвоенной частотой и числом кадров. Это полезно, если вы хотите использовать Trim и тому подобные фильтры с точностью до одного поля.

SeparateFields использует информацию о порядке полей клипа источника для решения которое из каждой пары полей выводится первым. Если порядок неверен, используйте ComplementParity перед SeparateFields. Если результат все равно неверен, возможно стоит использовать также и AssumeFrameBased

Фильтр ничего не делает, если клип уже основан на полях.
Blur / Sharpen
Blur(clip,amount)
Sharpen(clip,amount)

Фильтр использует простую 3x3 размывающую или обостряющую матрицу весов пикселов. Наибольший допустимый аргумент для Blur около 1.58, который соответствует равномерному размытию 3x3 пикселя. Значение 1.0 даёт вам веса пикселов (1/4, 1/2, 1/4). Если вам требуется Гауссовское размытие большего радиуса, примените несколько копий Blur(1.0) последовательно.

Отрицательные значения для Blur на самом деле повышают резкость изображения, и фактически Sharpen просто псевдоним для Blur(- n). Наименьшее допустимое значение для Blur - -1.0, и наибольшее для Sharpen - 1.0
ShowFiveVersions
ShowFiveVersions(clip1,clip2,clip3,clip4,clip5)

ShowFiveVersions берёт пять видео-потоков и соединяет их в зигзагообразном порядке слева на право. Единственное применение для этого - помочь найти структуру NTSC "3:2 pulldown". Этого можно добиться используя такой код:
# Наблюдать все пять структур 3:2 pulldown сразу

DoubleWeave()
# Встаете фильтр изменения размера если надо (см. ниже)
a = Pulldown(0,2).Subtitle("0,2")
b = Pulldown(1,3).Subtitle("1,3")
c = Pulldown(2,4).Subtitle("2,4")
d = Pulldown(0,3).Subtitle("0,3")
e = Pulldown(1,4).Subtitle("1,4")
ShowFiveVersions(a,b,c,d,e)

Этот код показывает пять структур "3:2 pulldown" с добавленным текстом идентифицирующим каждую из них. Затем просматривая конечный фильм можно выбрать структуру не содержащую смешанных кадров. (При обычном "3:2 pulldown" должно быть две одинаково хороших. Посмотрите на диаграмму в описании для фильтра Pulldown и поймёте почему.) Если ни одна из пяти не подходит, то вы имеете дело с одной из более извращённых форм "3:2 pulldown" и вам может понадобиться использовать PeculiarBlend.

Кстати, если вы планируете захватывать в высоком разрешении и затем масштабировать к нужному размеру, как рекомендовалось, вы возможно должны поместить ReduceBy2 или BilinearResize или что-нибудь сразу после команды DoubleWeave в вышерасположенном коде, до DoubleWeave это сработает неверно, а если отложите на будущее, ShowFiveVersions сформирует по-настоящему большой кадр.
ShowFrameNumber
ShowFrameNumber(clip)

ShowFrameNumber отрисовывает текст на каждом кадре показывающий каким AVISynth считает его номер. Фильтр иногда полезен при написании скриптов. Если вы примените дополнительные фильтры после ShowFrameNumber, будут рассматривать текст в кадре просто как часть картинки, так что номер может быть искажён к тому времени, как вы его увидите.
ShowSMPTE
ShowSMPTE(clip,fps)

Фильтр ShowSMPTE аналогичен ShowFrameNumber, но показывает код времени SMPTE (часы:минуты:ссекунды:кадр). Аргумент fps необходим и должен быть 24, 25, 30 или 29.97.
SpatialSoften / TemporalSoften
SpatialSoften(clip,radius,luma_threshold,chroma_threshold)
TemporalSoften(clip,radius,luma_threshold,chroma_threshold)

Фильтры SpatialSoften и TemporalSoften удаляют шум из видео-клипа выборочно смешивая пиксели. Это фильтры могут творить чудеса, и весьма рекомендуется попытаться использовать их. Но они также могут стереть мелкие детали если пороги слишком высоки, поэтому не перестарайтесь. И они очень медленны, особенно с большими значениями радиуса, поэтому не включайте их до тех пор, пока всё остальное не будет готово.

SpatialSoften заменяет каждый пиксель в кадре средним всех соседних выборок отличающихся от центральной выборки не более чем на указанное пороговое значение. "Соседний" значит пиксель не далее чем на +/- radius в направлениях X и Y. Пороги используются как luma_threshold для Y (яркостной составляющей) выборок, и chroma_threshold для U и V (цветовой составляющей) выборок.

TemporalSoften аналогичен, исключая то, что он просматривает один и тот же пиксель в соседних кадрах. Используются все кадры не далее чем на +/- radius отстоящие от центрального. Этот фильтр не выглядит столь же эффективным, как SpatialSoften.

Рекомендуется "поиграть" с параметрами для этих фильтров, чтобы получить представление о том, что они делают - к примеру попробуйте установить одному из трёх параметров очень высокое значение, оставляя другие с низким, и смотрите что выйдет. Помните, что установка любого из параметров в 0.0 станет причиной очень медленного ничего-ни-делания.

В AVISynth, SpatialSoften и TemporalSoften работают только в пространстве цвета YUY2. Можно использовать ConvertToYUY2 фильтр если исходный видео-клип не в YUY2 формате.
StackHorizontal / StackVertical
StackHorizontal(clip1,clip2[,...])
StackVertical(clip1,clip2[,...])

StackHorizontal берёт два видео-клипа и показывает их вместе слева-на-право. Высоты изображений и их цветовые форматы должны совпадать. Остальная информация (звуковая дорожка, частота кадров и т.д.) в основном берётся из первого клипа. StackVertical делает тоже самое, но сверху-вниз. Например:

Примеры

# Сравнение кадров с и без подавления шума
StackVertical(last, last.SpatialSoften(2,3,6))

# Располагает клипы переменных a, b, c, d квадратом:
# a b
# c d
StackVertical(StackHorizontal(a,b),StackHorizontal(c,d))
Subtitle
Subtitle(clip,"text",x,y,first-frame,last-frame,"font-name",point-size[,text-color[,halo-color]])
Subtitle(clip,"text")

Фильтр Subtitle добавляет строку сглаженного текста в последовательность кадров. Если вы желаете более одно субтитра, или субтитр содержащий более одной строки, вы должны сцепить вместе несколько фильтров Subtitle. Этот фильтр очевидно неприменим для чего-то большего, чем случайное использование.

Цвет текста и ореола должны быть заданы как шестнадцатеричное RGB значение, как в HTML, не считая того, что начинается оно с $ вместо #. (# Используется для комментирования).

Альтернативная, краткая форма полезна когда вас не беспокоит, как выглядят субтитры до тех пор, пока вы их видите. К примеру, когда вы используете фильтр StackVertical, который покажет несколько вариантов кадра сразу, и желаете пометить их, чтобы помнить что есть что.

AVISynth использует фильтр внутри для метода Version и для вывода сообщений об ошибках. Ещё механизм субтитров используется в ShowFrameNumber.
Subtract
Subtract(clip1,clip2)

Subtract формирует выходной клип в котором каждый пиксель устанавливается в соответствии с разницей между соответствующими пикселями в clip1 и clip2. Более точно, он устанавливается (50% gray) + (clip1 pixel) - (clip2 pixel). Вы можете использовать Levels после, если желаете повысить контраст. К примеру:
# Сделать разницу между clip1 и clip2 явно очевидной Subtract(clip1,clip2).Levels(127,1,129,0,255)

Если хотите в деталях увидеть разнице между смежными кадрами, можете использовать код:
Subtract(clip.Trim(1,0),clip)
SwapFields
SwapFields(clip)

Фильтр SwapFields меняет местами строку 0 со строкой 1, строку 2 со строкой 3 и т.д., что эффективно меняет местами два поля в чересстрочном кадре. Тоже самое делает SeparateFields.ComplementParity.Weave (и именно так фильтр реализован).


Описание утилиты AVISynth.

T
SpatialSoften / TemporalSoften
SpatialSoften(clip,radius,luma_threshold,chroma_threshold)
TemporalSoften(clip,radius,luma_threshold,chroma_threshold)

Фильтры SpatialSoften и TemporalSoften удаляют шум из видео-клипа выборочно смешивая пиксели. Это фильтры могут творить чудеса, и весьма рекомендуется попытаться использовать их. Но они также могут стереть мелкие детали если пороги слишком высоки, поэтому не перестарайтесь. И они очень медленны, особенно с большими значениями радиуса, поэтому не включайте их до тех пор, пока всё остальное не будет готово.

SpatialSoften заменяет каждый пиксель в кадре средним всех соседних выборок отличающихся от центральной выборки не более чем на указанное пороговое значение. "Соседний" значит пиксель не далее чем на +/- radius в направлениях X и Y. Пороги используются как luma_threshold для Y (яркостной составляющей) выборок, и chroma_threshold для U и V (цветовой составляющей) выборок.

TemporalSoften аналогичен, исключая то, что он просматривает один и тот же пиксель в соседних кадрах. Используются все кадры не далее чем на +/- radius отстоящие от центрального. Этот фильтр не выглядит столь же эффективным, как SpatialSoften.

Рекомендуется "поиграть" с параметрами для этих фильтров, чтобы получить представление о том, что они делают - к примеру попробуйте установить одному из трёх параметров очень высокое значение, оставляя другие с низким, и смотрите что выйдет. Помните, что установка любого из параметров в 0.0 станет причиной очень медленного ничего-ни-делания.

В AVISynth, SpatialSoften и TemporalSoften работают только в пространстве цвета YUY2. Можно использовать ConvertToYUY2 фильтр если исходный видео-клип не в YUY2 формате.
Trim
Trim(clip,first-frame,last-frame)

Trim вырезает часть видео-клипа включающую только кадры с first-frame до last-frame. Звук также вырезается и остаётся синхронизированным. Передача 0 для last-frame означает "конец клипа". К примеру:
Trim(100,0) # удалить первые 100 кадров


Описание утилиты AVISynth.

U
AlignedSplice / UnalignedSplice
AlignedSplice(clip1,clip2[,...])
UnalignedSplice(clip1,clip2[,...])

AlignedSplice и UnalignedSplice соединяют два или более видео-клипов непрерывно. Различие между фильтрами лежит в том, как они обращаются со звуковыми дорожками. UnalignedSplice просто соединяет их без внимания к синхронизации с видео. AlignedSplice обрезает первую звуковую дорожку или вставляет тишину, смотря что требуется для гарантии сохранения синхронизации с видео второй звуковой дорожки.

Вы должны использовать UnalignedSplice когда объединяемые фонограммы были исходно непрерывны - к примеру, когда вы объединяете файлы захваченные в AVI_IO. Небольшие ошибки отсчётов времени могут вести к щелчкам в звуке если вы примните AlignedSplice в такой ситуации.

Скриптовый язык AVISynth предоставляет + и ++ как синонимы для UnalignedSplice и AlignedSplice соответственно
Пример 1:
# Объединить сегментированный файл захвата для формирования цельного клипа
UnalignedSplice(AVISource("capture1.avi"), AVISource("capture2.avi"), AVISource("capture3.avi"))
# или: AVISource("capture1.avi") + AVISource("capture2.avi") + AVISource("capture3.avi")
Пример 2:
# Извлечь три сцены из клипа и объединить их вместе в новом порядке
AVISource("video.avi")
edited_video = Trim(2000,2500) ++ Trim(3000,3500) ++ Trim(1000,1500)


Описание утилиты AVISynth.

V
Version
Version()

Метод Version создаёт видео-клип 476x104, 24 FPS, 10 секунд, формат RGB с краткой информацией по AVISynth зелёным 24-пункта Arial шрифтом.
HorizontalReduceBy2 / VerticalReduceBy2 / ReduceBy2
HorizontalReduceBy2(clip)
VerticalReduceBy2(clip)
ReduceBy2(clip)

Фильтр HorizontalReduceBy2 уменьшает горизонтальный размер кадра наполовину и VerticalReduceBy2 уменьшает вертикальный размер кадра наполовину. Применённые последовательно они уменьшат наполовину весь кадр (на четверть по площади). Псевдонимом такой последовательности является ReduceBy2

Фильтр использует значения пикселов с весами (1/4, 1/2, 1/4) те же, что и в фильтре VirtualDub 2:1 reduction (high quality), что позволяет избежать эффекта "лестницы" возникающего при весах (1/2, 1/2). VirtualDub "resize" использует третий набор весов для уменьшения 2:1, но эксперименты показали, что они дают выглядящие несколько хуже MPEG файлы - по-видимому причина в немного подчёркнутых границах, а большинство кодеков не любят четких границ.

Если источник - чересстрочный, VerticalReduceBy2 выполнит deinterlace как побочный эффект. Если вы планируете размер результирующего видео порядка 320x240, рекомендуется захватывать видео с полным чересстрочным размером (320x480) и использовать VerticalReduceBy2. Это даст выглядящий лучше результат. Кодек HuffYUV сжимает видео порядка 2:1 без потерь, и если позволяет система можно захватывать 640x480 и выполнять ReduceBy2. Однако при использовании MJPEG кодека преимущество в качестве будет невелико и может оказаться лучше использовать Huffyuv с размером кадра 320x480.


Описание утилиты AVISynth.

W
Weave
Weave(clip)

Фильтр Weave противоположен SeparateFields. Он берёт пары полей исходного видео-клипа и соединяет их вместе для создания чересстрочных кадров. Новый клип имеет уменьшенные на половину частоту кадров и их число. Weave использует информацию о соответствии кадров клипа источника решая какое поле расположить наверху. Если порядок неверен используйте ComplementParity до или SwapFields после.

Все фильтры AVISynth сохраняют информацию о последовательности полей, ты что Weave всегда объединит поля вместе в правильном порядке. Если вы хотите изменить его, используйте ComplementParity до или SwapFields после.

Фильтр ничего не делает, если клип уже основан на кадрах.
AVISource / OpenDMLSource / AVIFileSource / WAVSource
AVISource("filename")
OpenDMLSource("filename")
AVIFileSource("filename")
WAVSource("filename")

AVISource передаётся один аргумент, являющийся именем файла в кавычках. Метод пытается считать этот файл используя либо интерфейс "Video-for-Windows" либо встроенный OpenDML код (перенесённый из VirtualDub). Фильтр способен загрузить любой файл, для которого существует AVIFile обработчик. Сюда включаются не только AVI файлы, но и WAV, AVS (скрипт AVISynth) и VDR (фрейм-сервер VirtualDub).

Метод AVISource определяет тип файла и вызывает наиболее соответствующий AVIFile или OpenDML обработчик. В случае, если открыть файл таким образом не удаётся, можно использовать OpenDMLSource или AVIFileSource, явно указывая какой тип обработчика использовать. Оба фильтра способны читать обычные (>2GB) AVI файлы. Но только через OpenDML можно работать с файлами большего размера, и только AVIFile открывает не AVI файлы (WAV, VDR, AVS).

Примеры

AVISource("d:\capture.avi") # Замечание C-программистам: обратный слеш не дублируется.
AVISource("c:/capture/00.avi") # прямой слеш также работает
AVISource("f:\soundtrack.wav") # это работает
WAVSource("f:\soundtrack.wav") # и это тоже


Описание утилиты AVISynth.

Общая информация

Все выражения AVISynth имеют вид:
variable_name = expression
expression
return expression
end

В первом случае, expression вычисляется и результат (который всегда видео-клип) присваивается variable_name. Во втором случае expression вычисляется и результат присваивается специальной переменной last. В третьем случае, expression вычисляется и используется как "return value" - возвращаемое значение скрипта, т.е. видео-клип, который увидит приложение открывшее этот AVS файл. Четвёртый вариант эквивалентен return last.

variable_name может быть до 50 символов длинной и содержать буквы, цифры, знак подчёркивания (_) и никаких иных. Имя не может начинаться с цифры.

expression может принимать следующие формы.
variable_name
Function(args)
expression.Function(args)
expression1 + expression2
expression1 ++ expression2

В первом случае, значение expression есть значение ранее установленной переменной variable_name. Во втором случае, значение есть возвращаемое значение некой функции (которая может быть неким методом формирующим видео-клип). Третий случай - альтернативная запись (Объектно Ориентированный стиль), эквивалентная Function(args, expression). Четвёртый и пятый варианты эквивалентны UnalignedSplice(expression1, expression2) и AlignedSplice(expression1, expression2) соответственно

Функции в скриптовом языке AVISynth это видео-фильтры либо методы модифицирующие (и формирующие) видео-клипы. Синтаксис вызовов показан в описаниях фильтров и методов. Функциям может передаваться до 60 аргументов (этого должно хватить), и возвращаемое значение всегда видео-клип. Функции всегда возвращают новый видео-клип, никогда не модифицирую существующий.

args - список аргументов функции разделённых запятыми. Список может быть пустым. Любой аргумент должен быть строкой текста, целым или с плавающей точкой числом или видео-клипом (это expression). Если функция ожидает видео-клип, как последний аргумент, и этот аргумент не указан, тогда в качестве опущенного аргумента используется специальная переменная last

Фильтры AVISynth могут принимать именованные аргументы. Именованные аргументы могут быть записаны в любом порядке и фильтр выберет значения по умолчанию для тех, что вы пропустите. В результате некоторые фильтры делаются значительно более лёгкими в применении. К примеру, вы можете теперь писать Subtitle("Hello, World!", text_color=$00FF00, x=100, y=200) вместо Subtitle("Hello, World!", 100, 200, 0, 999999, "Arial", 24, $00FF00).

Вызовы функций можно записывать без скобок, например FilterName arg1, arg2. Основной резон для этого - сохранение совместимости со старыми скриптами. Однако, иногда удобно не использовать скобки, когда нет возможности возникновения путаницы

Строка текста окружается либо "символами цитирования" либо ``в стиле TeX''. Строка текста может содержать любые символы кроме завершения, символа цитирования или двойных апострофов. Если вам надо использовать символ цитирования в строке, применяйте запись в стиле TeX. Как альтернативу, для преодоления данного ограничения можно использовать фигурные символы цитирования из Windows расширения ASCII таблицы

Целое число - строка цифр, с необязательным + или - в начале. Число с плавающей точкой - строка цифр с точкой где-то внутри и необязательным + или -. К примеру +1. воспринимается как число с плавающей точкой.

Также можно использовать шестнадцатеричные числа с префиксом $. Такие числа рассматриваются как целые. К примеру $FF8800 - оттенок оранжевого. Это тоже самое, что и запись используемая в HTML, за исключением того, что в HTML используется префикс #, а не $.

Любое выражение AVISynth должно занимать одну строку. Размещение более одного выражения в строке или разделение одного выражения на несколько строк не поддерживается.

AVISynth игнорирует любой текст следующий после символа # и до конца строки. Этот символ может быть использован для добавления в скрипт комментариев.

AVISynth игнорирует регистр: aViSouRCe применим также, как и AVISource.

Вы можете получить свойства клипа в AVS скрипте. К примеру, если переменная clip содержит видео-клип, то clip.height его высота, clip.framecount длина в кадрах и т.д. Вы можете работать с этими значениями используя все обычные арифметические и логические операторы (из C), и выполнять условный код с оператором ?: (к примеру clip = clip.IsRGB?clip.Subtitle("RGB"):clip.Subtitle("Not RGB")). Полный список свойств таков: width, height, framecount, framerate, audiorate, audiolength, audiochannels, audiobits, IsRGB, IsYUY2, IsFieldBased, IsFrameBased.

Вспомогательные системные функции: floor(f), ceil(f), round(f) (преобразование числа с плавающей точкой в целое); IsBool(var), IsInt(var), IsFloat(var), IsString(var), IsClip(var), Defined(var) (предикаты); Default(x,d) (возвращает x если Defined(x), в противном случае d); Eval(string) и Apply(func-string,arg,...), (Eval("f(x)") эквивалентно f(x) и Apply("f", x)); Import(filename) (вычисляет содержимое файла); Assert(bool-expr,error-message) для вывода сообщения об ошибке.

Вы можете определить и вызывать свои собственные функции в AVS скрипте, например так:

function NTSC2PAL(clip c) {
# Довольно хорошее преобразование NTSC->PAL. Была бы лучше с Smart Bob. :-)
    Assert(c.height == 480, "NTSC2PAL: input clip must have 480 scan lines")
    Bob(c, height=576)
    ChangeFPS(50)
    SeparateFields().SelectEvery(4,0,3)
    return Weave()
}
AVISource("ntsc.avi").NTSC2PAL()


Описание утилиты AVISynth.

Введение.
Что такое AVISynth?

AVISynth это скриптовый язык и набор фильтров для решения простых задач нелинейного редактирования. AVISynth необычен тем, что он не создаёт выходных файлов. Вместо этого, скрипты AVISynth, имеющие расширение AVS, могут быть напрямую открыты в приложениях читающих AVI файлы. Когда открывается скрипт AVS, AVISynth запускается в фоновом режиме, формирует видео и аудио данные согласно скрипту и "скармливает" их приложению по мере надобности.

Вместе с плагином видео-сервера, AVISynth позволяет использовать Premiere или FlasK в качестве фрейм-сервера. Это очень полезно, если вы желаете закодировать ваше отредактированное в Premiere или FlasK видео во внешнем кодировщике (например TMPGEnc, Cinemacraft или VirtualDub). Это достигается путём создания " ложного" AVI файла. Этот созданный "ложный" AVI файл загружается в кодировщик и кодируется как нормальный AVI. Это решает проблему создания требующего много времени промежуточных AVI требующих много места. При запуске плагин видео-сервер для Premiere и FlasK создаёт "ложный" AVI файл c:\part0.avs (с использованием разделения ещё и part1.avs). Если вы загрузите AVS в кодировщик AVISynth выполняет соединение с видео- сервером, затем запросы кодировщика на чтение передаются в плагин Premiere/FlasK. Далее плагин обрабатывает запрос и пересылает аудио/видео в кодировщик. Такая структура называется меж-процессной связью и реализуется через команду AVISynth IPCSource.

Скриптом в одну строчку вы можете добавить поддержку сегментированных файлов захвата, AVI файлов размера >2GB, QuickTime файлов MOV, MPEG файлов в приложения которые сами по себе такой поддержки не имеют. Используя Trim, Splice и Dissolve вы можете выбрать и перераспределить сцены необработанного отснятого видео. Применяя ReduceBy2, BilinearResize и BicubicResize вы можете отмасштабировать кадры видео(с качеством сравнимым с Photoshop и лучшим чем в Premiere). Благодаря командам SeparateFields и Weave вы можете редактировать чересстрочное видео с точностью до кадра. Пользуясь Pulldown вы можете избавиться от "3:2 pulldown". Накладывая фильтры SpatialSoften и TemporalSoften вы можете подавить шум в вашем видео добиваясь значительно лучшего качества в выходных форматах типа MPEG.
AVISynth и VirtualDub?

Способность VirtualDub выступать в роли "фрейм-сервера" имеет такую же функциональность, как и AVISynth. Рассмотрим преимущества и недостатки обоих этих программ.

Преимущества AVISynth над VirtualDub:
  • Архитектура фильтрации в VirtualDub ограничена линейным редактированием. В AVISynth архитектура фильтрации и скриптовый язык могут выполнять произвольные операции нелинейного редактирования. Задачи, требующие специального кода в VirtualDub, такие как "вырезка", восстановление оригинальных кадров фильма из полей (inverse telecine) и объединение множества входных файлов поддерживаются естественным образом стандартными фильтрами AVISynth, и многие задачи которые невозможно решить в VirtualDub легко решаются AVISynth.
  • AVISynth может читать большинство файлов, которые Windows Media Player может воспроизводить, включая MOV/QT, MPEG, MP3, DV type 1 и т.д..
  • Так как AVISynth выполняется внутри адресного пространства вызывающей программы, требуются меньшие накладные расходы по сравнению с VirtualDub в режиме фрейм-сервера. Это значит, что при прочих равных условиях AVISynth лидирует в общем времени выполнения.
  • Фильтры AVISynth обрабатывают изображение в цветовом пространстве YUY2 также хорошо, как и в RGB.
  • Скрипты AVISynth - вещь в себе и всегда доступны для открытия; вам нет нужды запускать фрейм-сервер. Старые скрипты можно использовать снова.

Преимущества VirtualDub над AVISynth:
  • VirtualDub имеет приятный графический интерфейс. AVISynth не имеет графического интерфейса вообще - вы должны писать файлы скриптов.
  • VirtualDub имеет больший выбор фильтров.
  • VirtualDub лучше оптимизирован, чем AVISynth. Некоторые фильтры VirtualDub (например Resize) выполняются заметно быстрее своих AVISynth эквивалентов.
  • VirtualDub способен выполнять прямое копирование источника (direct stream copy), в котором AVI файлы могут объединяться и усекаться без цикла разжатия/сжатия. AVISynth всегда разжимает видео (впрочем, как и фрейм-сервер VirtualDub).
  • У VirtualDub есть много других полезных возможностей, не относящихся к фрейм-серверу, таких как встроенный захват видео.

На самом деле между VirtualDub и AVISynth нет противоборства. AVISynth фактически содержит порядочный объём кода VirtualDub. Благодаря публикации исходного кода VirtualDub его автором, Авери Ли (Avery Lee) Многие программисты использовали их. Обе программы VirtualDub и AVISynth бесплатны, и их можно использовать вместе.

Установка AVISynth

Установка AVISynth проста. Во-первых удостоверьтесь, что в системе не присутствует старая версия AVISynth. (проверить можно поискав avisynth.dll на жёстком диске). Во-вторых, необходимо скачать AVISynth из всемирной сети (если вы уже не скачали). Внутри архива найдите avisynth.dll. Скопируйте этот файл в директорию Windows 9x \System (или \System32 для WinNT/W2k). После этого запускайте файл install.reg также находящийся в архиве. Всплывшее окошко должно сообщить об успешном импорте в реестр. Теперь AVISynth зарегистрирован и в рабочем состоянии. После установки, кодировщики должны быть способны читать AVS файлы.

AVISynth протестирован в системах Windows 98, Windows NT и Windows 200. Так что проблем быть не должно.
Информация об авторах AVISynth

Разработку AVISynth начал Бэн Рудиак-Гоулд (Ben Rudiak-Gould) Это была весьма приятная утилита, но она содержала несколько ошибок. В связи с этим Эдвин ван Эгглен (Edwin van Eggelen) внёс изменения, разрешающие некоторые из них. Далее была выпущена новая версия программы, но без модуля IPCSource. Этот модуль также внёс Эдвин ван Эгглин. К сожалению затем Бен Рудиак-Гоулд пропал (Октябрь 2000). Так что в настоящее время основную работу по поддержке текущей версии AVISynth и её развитию выполняет Эдвин ван Эгглен.


Описание утилиты AVISynth.

Ссылки.
http://www.doom9.org/
Кроме того, что здесь можно найти не только упомянутые но и многие другие полезные программы, на этом сайте имеется множество инструкций и обзоров по различным темам связанных с извлечением видео-файлов с DVD, кодированием в MPEG и DivX и т.п..
http://www.math.berkeley.edu/~benrg/index.html
Домашняя страница создателя AVISynth. Здесь можно найти оригинальный текст описания скриптового языка. Также здесь находится описание другой полезной программы - кодека сжатия видео без потерь HuffYUV.
http://www.videotools.net/
Сайт разработчика продолжающего развитие AVISynth. Кроме того он же разработал подключаемый модуль для Premiere и FlasK выполняющий функции видео-сервера и программу AVIWrapper позволяющую открывать скрипты AVISynth в программах работающих с AVI нестандартно (Microsoft Media Encoder и Cinemacraft SP v2.62).
http://www.digital-digest.com/nickyguides/synth-vdub.htm
Ещё одно учебное пособие по AVISynth. Предлагаемая там информация не несёт ничего принципиально нового, по сравнению описанием разработчика. Кроме того с появлением плагина MPEG2DEC оно несколько устарело.
http://www.rmvos.nl/
На этом сайте присутствует несколько Могущих быть полезными обзоров. Что более интересно, все вопросы к разработчику связанные с AVISynth лучше задавать в имеющейся здесь форме. Так вероятность получения ответа будет выше.
http://hiroko.ee.ntu.edu.tw/
Сайт разработчика DVD2AVI. Программы совместно с плагином MPEG2DEC позволяющей открывать в AVISynth MPEG файлы с DVD.
http://me.in-berlin.de/~faphida/m2/m2index.html
Авторская страница по плагину MPEG2DEC и SpatialSoftenMMX.
http://www.virtualdub.org/
Домашняя страница автора VirtualDub. Кроме самой программы можно найти набор фильтров к ней, расположенных как внутри, так и вне сайта.
http://www.nandub.org/
Сайт посвящённый надстройке VirtualDub - NanDub реализующей так называемый Smart Birtrate Control. NanDub выполняет двухпроходное кодирование и вычисляет битрейт каждого кодируемого кадра исходя из значений полученных при первом проходе и настроек кодирования. Описание на английском можно найти на http://www.doom9.org/. На русском существует описание по адресу http://www.3dnews.ru/reviews/multimedia/dvd-rip2/


Описание утилиты AVISynth.

Подгружаемые фильтры.
Фильтры VirtualDub.

Команда LoadVirtualdubPlugin позволяет использовать в скрипте подгружаемые однопроходные фильтры VirtualDub. Чтобы стандартизировать запись наиболее употребимых фильтров можно использовать файл vdfilters.avs (Загрузить / Посмотреть). Аналогичным образом можно подготовить обращение к другим фильтрам.
Плагин InverseTelecine.

Это небольшой фильтр первоначально разработанный для тестирования команды LoadPlugin в AVISynth. Но применение части его - фильтра InverseTelecine давало великолепные результаты и автор опубликовал его в сети. Другая часть - фильтр DeInterlacing все еще в состоянии разработки, но можно надеяться, что и он будет когда-нибудь закончен.

Плагин был разработан для работы с AVISynth v1.0 или выше. Неизвестно, как он будет работать с любыми другими программами (Можно быть уверенным, что не будет) и такие эксперименты проводить не рекомендуются.

Для нормальной работы, плагин требует, чтобы видео-поток был в формате YUY2 (больше об этом ниже). Фактически, что либо другое может быть серьёзно испоганено.
InverseTelecine

Фильтр выполняет восстановление видео-потока прошедшего процедуру "Telecine" ("3:2 pulldown"). Плагин не может восстановить видео-поток который только чересстрочен или не прошёл через явный процесс Telecine.

Фильтр InverseTelecine использует три параметра: Верхний предел, Нижний предел и Порог (более об это ниже). Значения в области от 0 до 255 для верхнего и нижнего пределов и от 1 до 1000000 для порога. (Хорошие результаты дают значения 40,10,15).
Верхний предел
если разница значений яркости двух пикселов (один над другим) выше этого значения, то пиксель считается "чересстрочным".
Нижний предел
если разница значений яркости двух пикселов (один над другим) ниже этого значения, то пиксель считается "не чересстрочным".
Порог
если значение "чересстрочности" его превышает то необходим перерасчёт структуры "3:2 pulldown"

Пример

LoadPlugIn("c:\archive\InverseTelecine.dll")
SegmentedAviSource("D:\capture.avi")
InverseTelecine(40,10,15)
DeInterlace

DeInterlace берёт чересстрочный видео-поток и восстанавливает прогрессивный согласовывая пары полей (без смешивания).

Прямо сейчас никаких параметров не требуется, но возможно это измениться ...

Для нормальной работы DeInterlace нужно уметь находить правильное соответствие полей в текущем и смежных кадрах. Это значит, что если видео-потоки сшиты вместе или ваша карта захвата работает не очень хорошо, вы можете увидеть несколько прошедших фильтр чересстрочных кадров.

Пример

LoadPlugIn("c:\archive\InverseTelecine.dll")
SegmentedAviSource("D:\capture.avi")
DeInterlace
Decimate

Decimate убирает одно дублированное поле в каждой группе определённых кадров. Эффект того же типа что и InverseTelecine, но на прогрессивных (не чересстрочных) видео-потоках.

Фильтру передаётся 3 параметра: Группа, Фильтр и Порог.
Группа
Указывает число кадров в группе из которых один кадр должен быть удалён. К примеру, Группа = 5 означает удаление 1 кадра в каждой группе из 5 кадров (что аналогично IVTC).
Фильтр
Указывает, как близко должны быть значения яркостей двух пикселей, чтобы быть рассматриваемыми как одинаковые. Для DVD рекомендуемые значения между 4 и 8 (лучше 8) и 16 или меньше для VHS.
Порог
Показывает, как похожи должны быть 2 кадра, чтобы рассматриваться как одинаковые. На текущий момент значения параметра должны лежать от 100 до 1000 (лучше 500) с большими значениями для менее качественных видео-потоков или большего движения.

Пример

LoadPlugIn("c:\archive\InverseTelecine.dll")
SegmentedAviSource("D:\capture.avi")
Decimate(5, 8, 500)
Дополнительная информация
Форматы YUV и RGB
Как известно, любой кодек разжимает либо в YUV либо в RGB формате. Говоря просто, RGB определяет пиксель присвоением 8 бит для Красного, Зелёного и Синего. YUV определяет пиксель его Яркостью и 2-мя цветоразностями. Следует помнить, что плагин использует значение Яркости для определения чередованы ли 2 строки, поэтому RGB не даст верной информации. Если кодек не разжимает в YUV формат, воспользуйтесь ConvertToYuY2.
Процедура Telecine
Процесс в ходе которого видео-поток с частотой кадров ~24 переводиться в видео-поток с частотой кадров ~30 (стандартный NTSC) добавлением двух полей (либо нечётных строк либо чётных) каждые 5 кадров (не сразу). В результате этого 3 из 5 кадров становятся чересстрочными, что хорошо выглядит на чересстрочном устройстве вывода (телевизор) но ужасно на прогрессивном (монитор).
Как работает плагин
Сперва плагин анализирует первые 5 кадров и определяет структуру "3:2 pulldown" выбирая 2 кадра с наименьшими артефактами чересстрочности. Далее, он продолжает выбирать каждый следующий кадр используя предопределенную структуру. Однако, каждый результирующий кадр анализируется, чтобы убедиться, что среди них не чересстрочных. Если значение чересстрочности превышает значение порога, структура "3:2 pulldown" вычисляется по новой.
    Реквизиты автора
  • E-Mail:Wizard_FL@Hotmail.com
  • ICQ: 4105331
Плагин MPEG2DEC.

MPEG2DEC.dll это AVISynth плагин дающий вам доступ к MPEG2 файлам также легко, как к нормальным AVI файлам. Это значит произвольный доступ к каждому кадру. Официальная страница http://me.in-berlin.de/~faphida/index.html.
mpeg2source
mpeg2source("file_name.d2v")

Код основан на проекте DVD2AVI v1.76 (http://hiroko.ee.ntu.edu.tw/). Фактически просто портирована VFAPI часть на C++ и добавлен ассемблерный код для получения YUV выхода. DVD2AVI всё ещё необходим для подготовки MPG файлов. Обычно, этот плагин используется так:
LoadPlugin("L:\path\MPEG2DEC.DLL")
video=mpeg2source("L:\path\mpg2video.d2v")
audio=AVISource("L:\path\sound.wav")
AudioDub(video, audio)

Первая строка загружает плагин. В результате новый метод AVISynth mpeg2source становиться доступен. Он используется во второй строке для открытия проектного файла DVD2AVI. Метод возвращает видео-клип готовый к использованию.

Следующие два шага необязательны. Но обычно ваше видео имеет звуковую дорожку, которую также надо обработать. Так как VFAPI плагин DVD2AVI не поддерживает извлечения звука, вы должны сперва отделить звуковую дорожку, чтобы она стала доступна из AVISynth как WAV файл. Этот файл открывается и присоединяется к видео-клипу в последних двух строках.

Преимуществом над VFAPI является то, что mpeg2source возвращает кадры в формате YUY2. VFAPI ограничено в RGB и вводит два времяёмких шагов преобразований (YUV->RGB, RGB->YUV)

Исходно плагин разрабатывался в рамках VFAPI соглашения, и конечно всё ещё возможно его использование таким образом даже в AVISynth. Напишите вместо LoadPlugin строку LoadVFAPIPlugin("L:\path\MPEG2DEC.dll", "mpeg2source"). Как результат вы получите потерю производительности из-за YUV->RGB преобразования.

Кроме метода mpeg2source плагин добавляет два фильтра: TemporalSmoother и SelectRangeEvery:
TemporalSmoother
TemporalSmoother(clip[,strength[,radius]])

Это портированный фильтр VirtualDub TemporalSmoother. Он работает в цветовых пространствах RGB32 и YUY2.

В файле помощи VirtualDub говориться: этот фильтр - адаптивный подавитель шума, работающий вдоль временной оси. Увеличивайте силу фильтра, чтобы увеличить шумоподавление и уменьшайте, для избавления от артефактов ряби и двоения. Рекомендуется комбинировать этот фильтр с пространственным (по площади) шумоподавителем для лучшего результата.

Все кадры не далее чем radius изучаются. Минимальный радиус - 1, максимальный - 7. Большие значения разумеется медленнее. Значение по умолчанию 3, как и то, что используется в VirtualDub. Значение по умолчанию для strength - 2.

Обратите внимание, что в отличии от своего VirtualDub двойника это фильтр не имеет задержки. Он обеспечивает нахождение кадра необходимого для работы в буфере. Поэтому, произвольный доступ к клипу медленен, особенно с большим radius.

Пример:
# Эффект фильтра отличается в RGB и YUV он не 100% эквивалентен, # особенно с большим значением strength # Давайте покажем различие
cYUY2 = ConvertToRGB(TemporalSmoother(ConvertToYUY2,10))
cRGB = TemporalSmoother(10)
Subtract(cYUY2, cRGB)
SelectRangeEvery
SelectRangeEvery(clip,every,length[,offset])

Выбирает length кадров каждые every кадров, начиная с offset. SelectRangeEvery(every,length,offset) одинаков с SelectRangeEvery(Trim(offset,0),every,length).
Плагин SpatialSoftenMMX.
    Системные требования
  • Win32
  • Расширения Athlon MMX или Intel SSE (и самый быстрый процессор, который вы можете достать...)
  • Память
  • AVISynth v1.x
    Реквизиты автора
  • Mathias Born
  • Домашняя страница http://me.in-berlin.de/~faphida/index.html
  • E-Mail:mborn@faphida.in-berlin.de
    Исходные материалы.
  • Алгоритмы использованные в этом фильтре не изобретены автором, напротив, они взяты из других источников.
  • Первая часть просто фильтр SpatialSoften из AVISynth портированный в MMX (и оптимизированный конечно)
  • Вторая часть пришла из фильтра VirtualDub dynamic noise reduction (разработчики Стивен Дон и Авери Ли)

Замечания по производительности

Итак, почему так ужасающе медленно? Причина в большом числе анализируемых пикселей для определения значения одного пикселя. Рассмотрим PAL видео: 720x576 x 4байта/цвет (RGB) = 1.58Mb. Радиус равный 4 даёт площадь 9x9 = 81 пикселей, таким образом фильтр читает 1.58 x 81 = 128Mb для каждого кадра!

Athlon 800 может вычислять 1 или 2 кадра в секунду. Высшие частоты не решают проблемы, так как она относится более к пропускной способности шины работы с памятью.

Можно ожидать, что YUV версия будет быстрее чем её RGB двойник благодаря меньшим требованиям к памяти. Но YUV формат пикселя сложен (читайте: времяёмок) для обработки. Как результат - разница невелика.

Часть кода может быть ещё оптимизирована: возможно удастся выжать несколько процентов переупорядочиванием некоторых инструкций чтобы воспользоваться параллельным запуском команд на современных процессорах. Но из-за малого числа регистров на архитектуре x86 почти все инструкции зависят от их порядка, и, особенно во внутреннем цикле, переупорядочивание невозможно.

Лучший вариант - использование видеосигнала без шума ^_^
Плагин GreedyHMA - Greedy (High Motion для AVISynth).

GreedyHMA.dll это плагин AVISynth выполняющий код алгоритма DScaler Greedy/HM для обнаружения структуры 3:2 pulldown, фильтрации и избавления от чересстрочности видео.
    Реквизиты
  • Пожалуйста присылайте комментарии Тому Барри (Tom Barry) - trbarry@trbarry.com
  • Временное расположение файлов:
    • Пока смотрите http://www.trbarry.com/GreedyHMA.zip
    • Исходный код на проекте открытых программ DScaler, или скоро будут. http://www.dscaler.org

Просто разожмите содержимое архива в вашу директорию с AVISynth, или ещё куда. Как видно из скрипта можно поместить плагин в поддиректорию к AVISynth, просто, чтобы держать их по-отдельности.

В архиве имеется тестовый скрипт:
LoadPlugin("d:\AVISynth\GreedyHMA\Debug\GreedyHMA.dll")
clip = AVISource("c:\vcr\bikes.avi")
return clip.GreedyHMA(1,0,4,0,0,0,0,0)

Здесь задаётся файл (укажите свой) и включаются TopFirst и AutoPulldown с прореживанием (отбрасывание кадров) до 24 FPS. Тесты проводились с AVISynth/VirtualDub

Возможно существует дефект кода, который требует чтобы параметр TopFirst был включен. Может быть это проявляется только с захватом Matrox G400 в MJPEG, но достигаемый результат несколько лучше с включённым параметром. Можно запустить 2-е копии VirtualDub и выполнить покадровое сравнение. Особо большой разницы не заметно но все же сравнение двух кадров (обратите внимание на диагонали) обычно покажет, что один лучше. Вы можете просто посмотреть вход VirtualDub для этого. Пока нет насущной необходимости в создании выходного файла.

В общем, если вы считаете что ваше видео (~ 30 FPS) происходит из фильма (~24 FPS), или так предполагает DVD2AVI, то применяйте:
GreedyHMA(1,0,5,0,0,0,0,0) # команда форсирует прореживание до 24 FPS

Если всё видел, применяйте:
GreedyHMA(1,0,0,0,0,0,0,0) # для 30 FPS на выходе
GreedyHMA(1,0,3,0,0,0,0,0) # для 24 FPS на выходе

И когда вы не знаете, не беспокоитесь, или всё перемешано, просто положитесь на автомат:
GreedyHMA(1,0,4,0,0,0,0,0) # общецелевые, наиболее автоматизированные установки
Более полное описание параметров.
GreedyHMA(TopFirst, SwapFields, AutoPullDown, MedianFilter, VerticalFilter, EdgeEnhance, GoodPullDownLvl, BadPullDownLvl)
Все значения целые, 0-нет, 1-да:
TopFirst
предполагает, что верхнее поле, строки 0,2,4,... должны отображаться первыми. Значение по умолчанию предположительно более общий случай BottomFirst (но не всегда).
SwapFields
для кривых драйверов захвата, помещающих строки 1,3,5,... до строк 0,2,4...
AutoPullDown
Устанавливает тип восстановления исходного порядка полей
0
Не восстанавливает, просто убирает гребёнку. Не отбрасывает кадры так что FPS остаётся какой был. Не прореживает. Используйте, если имеете (и хотите оставить) 30 FPS видеоисточник или возможно 25 FPS PAL видео.
1
Автоматическое восстановление. Автоматически решается, какие кадры должны быть подвергнуты процедуре восстановления (IVTC) или избавления от гребёнки (deinterlace), в зависимости от параметров Good Pulldown Lvls и Bad Pulldown Lvls (смотри ниже). Не прореживает. Лучший вариант если у вас в источнике смешаны фильм и видео и вы хотите 30 FPS на выходе. Также лучше для PAL источников.
2
Только восстановление (форсирование 24 FPS). Предполагает, что источник - фильм, всегда выполняет восстановление кадра и никогда не избавляется от гребёнки. Не прореживает.

Значения 3-5 соответствую вышеописанным, но с отбрасыванием кадров (прореживание). Просматриваются 5 кадров за раз и один наиболее похожий на дублированный отбрасывается, поэтому FPS опускается, скажем, с 30 до 24.

3
Освобождение от гребёнки (форсирование 30 FPS) но с отбрасыванием кадров. Применяйте для NTSC видео, если все же хотите проредить. С видеоисточником реально нет правильных полей для отбрасывания, но отброшены будут один кадр из наиболее похожих.
4
Автоматическое восстановление с отбрасыванием кадров. Лучшая (наиболее автоматическая) установка. Работает в большинстве случаев, по крайне мере если не имеет дефектов.
5
Только восстановление (форсирование 24 FPS) с отбрасыванием кадров. Даёт наилучшие результаты, если у вас 100% правильно подготовленный NTSC фильм источник не содержащий секций видео и слишком много монтажа. Возможно детектирование большинства смен сцены и изменение структуры восстановления, но не смешанных полей.

Что когда лучше полностью не тестировалось. Восстановление пока не идеально. Но если вы не уверены, оставьте значение 4 проста на всякий случай. Это должно всё ещё справляться со спортивным видео имеющим высокий уровень движения.

MedianFilter (по времени)
Внимание! Медианный фильтр в данной версии отключен.
Медианный фильтр помогает избавиться от шума но вызывает задержку на 2 поля. (Иначе на 1 поле) Задание 1 включает использование значения по умолчанию (сейчас 3, но может измениться) но вы можете также задать новое значение 2-255. Однако значения выше 3-5 могут стать причиной артефактов движения в быстром видео. Добавочное отбрасывание кадров медианного фильтра отключено так как работает с задержкой на 2 кадра в отличии от всего остального. Это выглядит не особо важным, так что на текущий момент не работает. Параметр сейчас игнорируется.
VerticalFilter
Не только освобождает от шума, но ещё слегка чистит артефакты освобождения от гребёнки так как выполняется последним, после избавления от гребёнки. Полезен, если вы собираетесь уменьшать. Используйте только значения 0 и 1 для параметра.
EdgeEnhance (по горизонтали)
Добавляет небольшую резкость к полноразмерному видео. Может использовать значения параметра 2-100. По умолчанию сейчас 50, если передано 1. Возможно будет поддержка отрицательных значений в будущем. Фильтрация горизонтальна, чтобы помочь с настройками для уменьшения размера.
Good Pulldown Lvl
Число от 1 до 255, которое должно быть превышено до того, как GreedyHMA восстановит кадр. Параметр применяется только когда AutoPulldown также включен. Значение по умолчанию подлежит изменению, а пока установлено в 90. Вы получите значение по умолчанию просто передав 0, что и рекомендуется для большинства случаев. Фактически это просто среднее по нескольким кадрам сохранённых показателей гребенчатости/переплетённости правильно согласованных кадров.
Bad Pulldown Lvl
Число от 1 до 255, которое не должно быть превышено до того, как GreedyHMA восстановит кадр. Значение по умолчанию подлежит изменению, а пока установлено в 85. Вы получите значение по умолчанию просто передав 0, что и рекомендуется для большинства случаев. Фактически это просто мера того, как сильно ухудшаться показатели гребенчатости/переплетённости кадра, если мы выполним чисто согласование полей.

Сейчас все 8 параметров должны присутствовать, проверка ошибок отсутствует, и нет других статей по Greedy/HM, кроме как на http://www.dscaler.org.
Известные проблемы и ограничения
  1. Только для машин с SSE! Расширение DScaler Greedy/HM написано, частично на ассемблере только для машин с SSE. Пока не сделан контроль нулевой погрешности, поэтому фильтр немедленно рухнет если вы не имеете хотя бы Celeron побыстрее, P-III, Athlon или выше. Нет уверенности, будет ли это в будущем исправлено, но возможно что да.
  2. Сейчас нет контроля ошибок или сообщений. Автор пока не разобрался как выводить сообщения об ошибках в AVISynth, и есть много чего, что надо ещё понять.
  3. Предполагается YUV(YUY2) основанный на кадрах вход. При необходимости сначала используйте методы AVISynth для конвертации.
  4. В настоящее время размер кара ограничен 999x576 пикселей. Исправлено... (Теперь, с целью поддержки HDTV, когда делалось для AVISynth установлено ограничение 1928x1081).
  5. Если у вас чистый, бесперебойный фильм-источник, без монтажа или капризного перевода в ~30 FPS и без видеоисточника, то вполне возможно что лучшую производительность и качество даст использование других функций VirtualDub для восстановления исходных кадров, а не морока с GreedyHMA. GreedyHMA спроектирован для высокоподвижных спортивных и смешанных видео с фильмом последовательностей. Он также может хорошо работать с аниме.
  6. Есть странный, не совсем понятный сбой. Если поставить новый или изменённый GreedyHMA.dll на свою машину, первый раз как вы запустите VirtualDub/AVISynth/GreedyHMA, VirtualDub может повиснуть. Если затем вы воспользуетесь Task Manager чтобы снять VirtualDub он заработает после этого. Чтобы избежать, похоже надо в начале открыть любой другой AVI файл в VirtualDub при первом запуске после установки GreedyHMA, до открытия каких-либо скриптов AVISynth. Позднейшее замечание: эффект не связан полностью с GreedyHMA, он происходит и без него.
  7. Сейчас фильтр работает правильно, если подаваемая ширина экрана кратна 16. в противном случае возможно формирование мусора в правом краю экрана, который вы возможно должны обрезать.
  8. Как отмечено выше опция медианной фильтрации временно игнорируется.
Метод избавления от гребёнки Greedy (High Motion).

Наконец следует слегка сокращённая копия резюме по Greedy (High Motion) со страницы помощи DScaler:

Плагин работает на двух различных уровнях. По умолчанию, на Первичном уровне, это нормальный метод избавления от гребёнки DScaler, со следующими особенностями.
    Что делает фильтр (Первичный уровень)
  • Объединение Blended Clip, Greedy (Low Motion), и немного новшеств.
  • Подразумеваемое Greedy восстановление оригинального кадра, как метод Greedy (Low Motion)
  • Смешивание параметров как метод Blended Clip.
  • Прогнозирующее выявление движения
  • Диагональное снижение ступенчатости (DJR) для сглаживания лестничного эффекта в движущихся диагональных линиях. Достигается это горизонтальным сглаживанием только быстро движущихся пикселов, не трогая стационарных. Если диагональная грань не движется, то она все равно не будет зубчатой при Greedy (High Motion).
  • Ползунковая регулировка для Max Comb (макс. гребёнка), Motion Threshold (порог движения) и Motion Sensitivity (чувствительность движения). Однако значения по умолчанию должны подходить в большинстве случаев.

Существует также Расширенный уровень (экспериментальный), включающийся, если вы отметите любой из элементов в интерфейсной панели метода. Вы не можете делать этого если не запускаете на машине поддерживающей набор инструкций Intel SSE (необходимы только целочисленные инструкции SSE). Расширенный уровень должен выполняться на Celeron побыстрее, Intel P-III, P4 и Athlon.

Когда используются расширенные возможности Greedy (HM) поддерживает свою собственную внутреннюю историю последних 4-х входных видео-полей. Значит он должен быть способен исследовать каждое поле и вы не можете использовать в тоже время обычную опцию DScaler - AutoPullDown.
    Что делает фильтр (Расширенный уровень)
  • Встроенное восстановление 3:2, 2:2 "n:m pulldown". Выполняется согласование, не устранение, так что все кадры показываются. Думается, что в итоге это будет лучше работать с видео-перекрытиями и живым TV просмотром, который подвергается интенсивному монтажу, но требуется дальнейшее совершенствование.
  • Промежуточные кадры. Даёт уменьшение дрожания для тех, кто имеет 60 Гц RTPV. В случае "3:2 pulldown" выберется подходящая пара полей в среднем единожды для каждых 5 кадров. Это может эффективно показать каждый новый входной кадр 2.5 раза. В результате небольшой объём размазывания движения каждый пятый кадр. Сам автор постоянно оставляет режим включенным для более гладкой последовательности кинофильма. С "2:2 pulldown" тоже работает (кажется), но половина кадров будет усреднена и размазывание движения может быть неприемлемым.
  • Настраиваемое усиление граней. Основано на идее Mr. Уигглеса(Wigggles). Опция усиливает только в небольшом объёме по горизонтальноё оси. Когда включено, вы можете использовать ползунок для подстройки.
  • Настраиваемый медианный фильтр. Также благодаря Mr. Уигглесу, фильтр может помочь убрать шум. Однако если установить выше 3-5 он также вызовет артефакты движения на быстродвижущихся сценах. Также имеет ползунок.
  • Вертикальный фильтр. Это программный вертикальный фильтр применяемый после избавления от гребёнки, который может устранить и шум и остаток артефактов избавления от артефактов избавления от гребёнки. Результат одинаков с аппаратной реализацией доступной на экране расширенных видео-флагов, но не такой экстремальный и без дрожания.


Описание утилиты AVISynth.

Подгружаемые фильтры.
###########################################################
# Этот файл обеспечивает стандартный интерфейс AVISynth к #
# различным плагинам VirtualDub. Его можно загрузить в    #
# свой скрипт командой:                                   #
#                                                         #
#   Import("vdfilters.avs")     #
###########################################################
#########################################################
# Измените VirtualDub_plugin_directory ниже на истинный #
# путь к директории содержащей ваши плагины VirtualDub #
#########################################################
global VirtualDub_plugin_directory = "d:\virtualdub\plugins"
##############################
# 2D Cleaner by Jim Casaburi #
##############################
function VD_2DCleaner(clip clip, int "threshold", int "radius", bool "interlaced")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\2dclean.vdf", "_VD_2DCleaner")
 return clip._VD_2DCleaner(default(interlaced,false)?1:0, threshold, radius)
}
####################################
# Temporal Cleaner by Jim Casaburi #
####################################
function VD_TemporalCleaner(clip clip, int "threshold", int "pixel_lock",
  \ int "threshold2", int "pixel_lock2", int "scene",
  \ bool "partial", bool "yuv")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\tclean.vdf", "_VD_TemporalCleaner", 10)
 return clip._VD_TemporalCleaner(default(threshold,10), default(pixel_lock,4),
  \  default(threshold2,16), default(pixel_lock2,8), default(scene,30),
  \  default(partial,false)?1:0, default(yuv,true)?1:0)
}
############################
# Colorize by Donald Graft #
############################
function VD_Colorize(clip clip, int "hue", int "sat", int "lum")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\colorize.vdf", "_VD_Colorize")
 return clip._VD_Colorize(default(hue, 0), default(sat, 150), default(lum, 150))
}
#############################
# Deflicker by Donald Graft #
#############################
# Двух-проходный фильтр, не поддерживается.
# Возможно будет переписан как фильтр AVISynth
############################################
# Hue/Saturation/Intensity by Donald Graft #
############################################
function DG_FloatToInt(f) { return round((default(f,1.0) - 1) * 100) }
function VD_Hue(clip clip, int "hue", bool "preserve_luma", float "sat", float "inten",
  \ bool "r", bool "g", bool "b", bool "y", bool "c", bool "m")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\hue.vdf", "_VD_Hue")
 hue = default(hue, 0)
 sat = DG_FloatToInt(sat)
 inten = DG_FloatToInt(inten)
 flags = (default(r,true)?1:0)+(default(g,true)?2:0)+(default(b,true)?4:0)
  \ +(default(y,true)?8:0)+(default(c,true)?16:0)+(default(m,true)?32:0)
 return clip._VD_Hue(hue, default(preserve_luma,false)?1:0, sat, inten, flags)
}
#############################################
# Red/Green/Blue Adjustment by Donald Graft #
#############################################
function VD_RGBAdjustment(clip clip, float "r", float "g", float "b")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\rgb.vdf", "_VD_RGBAdjustment")
 return clip._VD_RGBAdjustment(DG_FloatToInt(r), DG_FloatToInt(g), DG_FloatToInt(b))
}
#############################
# Smart Bob by Donald Graft #
#############################
# входной клип должен пройти через SeparateFields. Возможно вам
# понадобится AssumeFrameBased, AssumeFieldBased, или ComplementParity
# перед ним.
function VD_SmartBob(clip clip, bool "show_motion", int "threshold", bool "motion_map_denoising")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\bob.vdf", "_VD_SmartBob", 1)
 return clip.SeparateFields._VD_SmartBob(clip.GetParity()?1:0,
  \  default(show_motion,false)?1:0, default(threshold,10),
  \  default(motion_map_denoising,true)?1:0)
}
########################
# Logo by Donald Graft #
########################
function VD_Logo(clip clip, int "x", int "y", int "alpha", bool "transparent",
  \ int "xr", int "xg", int "xb", string "filename",
  \ bool "animate", int "start", int "duration", int "loops")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\logo.vdf", "_VD_Logo", 1)
 return clip._VD_Logo(default(x,0), default(y,0), default(alpha,128),
  \ default(transparent,true)?1:0, default(xr,0), default(xg,0), default(xb,255),
  \ default(filename,"d:\virtualdub\plugins\logo.bmp"),
  \ default(animate,false)?1:0, default(start,0), default(duration,0), default(loops,0))
}
#####################################
# Smart Deinterlace by Donald Graft #
#####################################
# "Advanced Processing" опция не включена, так-как
# в ней дублируется встроеная функциональность AVISynth
function VD_SmartDeinterlace(clip clip, string "mode", string "channel", bool "show_motion",
  \  bool "blend", bool "motion_map_denoising", int "threshold")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\smart.vdf", "_VD_SmartDeinterlace", 1)
 mode = default(mode, "frame")
 mode = (mode=="frame") ? 0 : (mode=="field") ? 1 : (mode=="both") ? 2 : -1
 Assert(mode>=0, """VD_SmartDeinterlace: "mode" parameter must be "frame", "field", or "both"""")
 channel = default(channel, "luma")
 channel = (channel=="luma") ? 0 : (channel=="all") ? 1 : -1
 Assert(channel>=0, """VD_SmartDeinterlace: "channel" parameter must be "luma" or "all"""")
 return clip._VD_SmartDeinterlace(default(show_motion,false)?1:0,
  \  default(blend,false)?1:0, default(threshold,20), 0, 0, 0,
  \  default(motion_map_denoising,true)?1:0, mode, channel)
}
##################################
# Smart Smoother by Donald Graft #
##################################
function VD_SmartSmoother(clip clip, int "diameter", int "threshold", bool "interlaced")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\smooth.vdf", "_VD_SmartSmoother", 1)
 return clip._VD_SmartSmoother(default(diameter,5), default(threshold,25),
  \  default(interlaced,false)?1:0)
}
################################
# Unsharp Mask by Donald Graft #
################################
function VD_UnsharpMask(clip clip, int "diameter", int "strength", int "threshold",
  \ bool "interlaced", int "mask_top", int "mask_bottom",
  \ int "mask_left", int "mask_right")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\unsharp.vdf", "_VD_UnsharpMask", 1)
 return clip._VD_UnsharpMask(default(diameter,5), default(strength,32),
  \  default(threshold,0), default(mask_left,0), default(mask_right,0),
  \  default(mask_bottom,0), default(mask_top,0), default(interlaced,false)?1:0)
}
##########################
# Subtitler by Avery Lee #
##########################
# не-сглаженный режим не поддерживаентся, так-как
# эмулятор VirtualDub не поддерживает NEEDS_HDC
function VD_Subtitler(clip clip, string filename)
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\subtitler.vdf", "_VD_Subtitler")
 return clip._VD_Subtitler(1, filename)
}
#################################
# Border Smear by Simon Walters #
#################################
function VD_BorderSmear(clip clip, int yt, int yb)
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\brdrsmr.vdf", "_VD_BorderSmear")
 return clip._VD_BorderSmear(yt, yb)
}
################################
# Logoaway by Krzysztof Wojdon #
################################
function VD_LogoAway(clip clip, string "mode", int "x", int "y", int "width",
  \  int "height", int "keyframe", int "color")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\logoaway.vdf", "_VD_LogoAway")
 mode = default(mode, "xblur")
 mode = (mode=="xblur")?1:(mode=="yblur")?2:(mode=="xyblur")?3:(mode=="copy")?4:
  \  (mode=="avgborder")?5:(mode=="solid")?6:0
 Assert(mode>0, "VD_LogoAway: mode must be one of: xblur yblur xyblur copy avgborder solid")
 return clip._VD_LogoAway(mode, default(x,300), default(y,8), default(width,14),
  \  default(height,12), default(keyframe,0), default(color,0))
}
##########################
# Cartoon Tool by flaXen #
##########################
# "Show Inverse Map" не поддерживается, так-как очевидно
# недоступен через интерфейс скрипта
function VD_CartoonTool(clip clip, int "scale_base", int "scale_intensity", int "pixel_base")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\fxtoon.vdf", "_VD_CartoonTool")
 return clip._VD_CartoonTool(default(scale_base,16),default(scale_intensity,200),default(pixel_base,16))
}
########################
# VHS Filter by flaXen #
########################
function VD_VHS(clip clip, bool "stabilize", int "luma_threshold", int "chroma_threshold",
  \ int "temporal_error", int "temporal_bias", int "noise_threshold",
  \ int "pixel_radius", bool "prefilter", bool "postfilter", bool "sharpen",
  \ int "sharpen_amount", bool "eight_direction", int "chroma_shift_x",
  \ int "chroma_shift_y", bool "shift_i", bool "shift_q")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\fxvhs.vdf", "_VD_VHS")
 return clip._VD_VHS(default(stabilize,true)?1:0, default(luma_threshold,5),
  \  default(chroma_threshold,30), default(temporal_error,15), default(temporal_bias,5),
  \  default(noise_threshold,10), default(pixel_radius,1), default(prefilter,false)?1:0,
  \  default(postfilter,false)?1:0, default(sharpen,false)?1:0, default(sharpen_amount,15),
  \  default(eight_direction,false)?1:0, default(chroma_shift_x,-1), default(chroma_shift_y,0),
  \  default(shift_i,false)?1:0, default(shift_q,false)?1:0)
}


Описание утилиты AVISynth.

Учебное пособие.
Линейное редактирование

В первой части сего пособия, мы сконцентрируемся на линейном редактировании того же сорта, что вы можете выполнить в VirtualDub. Скриптовый язык AVISynth писался с расчётом на простоту решения задач линейного редактирования: вам нет нужды волноваться о переменных и сложных выражениях если вы этого не хотите.

Как только вы установили AVISynth, воспользуйтесь текстовым редактором для создания файла с именем version.avs (или любым другим, лишь бы расширение было AVS) и вставьте туда следующую единственную строку текста:
Version

Теперь запустите Windows Media Player и используйте его для открытия вашего файла. Если всё в порядке, вы должны увидеть десяти-секундный видео-клип показывающий информацию относящуюся к версии AVISynth. (Если же вы получите ошибку говорящую "формат не поддерживается", удостоверьтесь, что вы выполнили все инструкции по установке.)

Version - то, что можно назвать методом-источником, подразумевая, сто он формирует новый клип вместо модификации существующего. Первой командой в скрипте AVISynth должен быть метод источник (или команда загрузки внешнего фильтра).

Теперь добавьте вторую строчку в файл скрипта, так что он должен читаться так:
Version
ReduceBy2

Снова откройте этот файл в Windows Media Player. Вы снова должны увидеть информацию о версии, но в половину прежнего размера. ReduceBy2 - трансформирующий фильтр, это значит, что он берёт существующий фильтр и каким-то образом модифицирует его. Вы можете собрать последовательно множество трансформирующих фильтров, как в VirtualDub. Например добавим ещё один, чтобы сделать наше видео затухающим в темноту в конце. Добавим ещё строчку в файл скрипта:
Version
ReduceBy2
FadeOut(15)

Опять откроем файл. Клип должен быть таким же первые 9 секунд и затем, на последней секунде должен плавно перейти в чёрный. Фильтр FadeOut берёт целочисленный аргумент, который показывает число затухающих кадров. Видео сформированное Version имеет частоту кадров 15 FPS, так что аргумент равный 15 для FadeOut начинает заглушать за одну секунду до конца.

Проходит много времени до начала заглушения, так что давайте отрежем начало клипа для уменьшения ожидания. Клип формируемый Version - 150 кадров длинной (15 FPS в течении 10 секунд), и AVISynth начинает отсчёт кадров с 0, так что имеем кадры с 0 до 149. FadeOut добавляет лишний кадр, так что конец этого скрипта несколько дальше, кадры меняются с 0 до 150. Давайте отбросим первые 120 из них:
Version
ReduceBy2
FadeOut(15)
Trim(120,150) # отрезать первые 8 секунд

В этом примере впервые использован комментарий. Комментарий начинается с символа #, продолжается до конца строки и полностью игнорируется AVISynth.

Trim требует два аргумента разделённых запятой: первый и последний кадр части клипа, которую следует сохранить. Если передать 0 как номер последнего кадра, то это будет аналогично концу клипа, так что команда вырезания в скрипте может быть просто записана как Trim(120,0).

Помнить число кадров таким образом муторно. Гораздо легче открыть частично-готовый клип в приложении типа VirtualDub, которое покажет вам число кадров. Вы также можете использовать фильтр ShowFrameNumber, который впечатает номер кадра в него самого.

Имеется много других фильтров для обобщённого масштабирования, для размытия/подчёркивания границ, и для других целей. Прочитайте описание списка команд для всех чудовищных подробностей. На практике гораздо более используемым фильтром нежели Version будет AVISource, считывающий AVI файл (или один из нескольких других типов файлов) с диска. Если у вас есть поблизости AVI файл, вы можете попробовать использовать те же фильтры на нём:
AVISource("d:\capture.avi") # или как вы там его назовёте
ReduceBy2
FadeOut(15)
Trim(120,0)

Даже однострочный скрипт содержащий только команду AVISource может быть весьма полезен для добавления поддержки AVI файлов >2GB к приложениям поддерживающим только файлы <2GB.
Нелинейное редактирование

Теперь перейдём к более весёлой части. Сделаем AVS файл со следующим скриптом внутри:
StackVertical(Version, Version)

Теперь откроем его. Результат: Выходное видео имеет две идентичных линии информации о версии, одно над другой.

Вместо передачи чисел или строк как аргументов, StackVertical берёт видео-клипы. В этом скрипте, Version вызывается дважды. Каждый раз, метод возвращает копию клипа о версии. Эти два клипа затем передаются в StackVertical, который объединяет их вместе (не интересуясь их происхождением).

Один из наиболее используемых фильтров такого типа это UnalignedSplice, который соединяет видео-клипы друг-за-другом. Вот скрипт, который грузит три AVI файла (которые могут быть созданы AVI_IO) и объединяет их вместе.

UnalignedSplice(AVISource("d:\capture.00.avi"), AVISource("d:\capture.01.avi"), AVISource("d:\capture.02.avi"))

(Метод SegmentedAVISource обеспечивает лучшую реализацию. смотрите описание команд).

Обе команды, StackVertical и UnalignedSplice могут принимать как минимум два и как максимум шестьдесят аргументов.

Вы можете использовать оператор "+" как псевдоним для UnalignedSplice. К примеру, такой скрипт делает тоже, что и предыдущий.
AVISource("d:\capture.00.avi") + AVISource("d:\capture.01.avi") + AVISource("d:\capture.02.avi")

Давайте теперь предположим вы захватываете видео используя VIDCAP32. Это приложение также сохраняет видео в различных AVI сегментах, но оно помещает аудио в отдельном WAV файле. Можем ли мы воссоединить всё? Ваши ставки:
AudioDub(AVISource("d:\capture.00.avi")+AVISource("d:\capture.01.avi")+AVISource("d:\capture.02.avi"), WAVSource("d:\audio.wav"))

Все обычные трансформирующие фильтры использованные в части линейного редактирования принимают видео-клип своим последним аргументом. Так что вы можете написать к примеру:

FadeOut(15, ReduceBy2(Version))
Вместо:
Version
ReduceBy2
FadeOut(15)
Переменные

Вы должно-быть заметили то, что пример с AudioDub был немного неуклюж, и если мы объединяем более трёх файлов будет ещё хуже. Вы можете упростить ваши выражения использованием переменных. Вот другая версия последнего примера, который более управляем и лёгок для понимания:
a = AVISource("d:\capture.00.avi")
b = AVISource("d:\capture.01.avi")
c = AVISource("d:\capture.02.avi")
sound_track = WAVSource("d:\audio.wav")

AudioDub(a+b+c, sound_track)

Имена переменных может содержать до пятидесяти символов длинной и содержать буквы, числа и подчёркивание (_). Вы можете присвоить результат выражения переменной поместив имя переменной в начале строки, следующим = и затем выражение. После этого видео-клип будет присвоен переменной. Вы можете использовать переменную позже в любом месте, где ожидается клип.

Переменные никогда не изменяются пока вы не переприсвоите их. Для примера, вы можете написать ReduceBy2(myvideo), но это не изменит переменной "myvideo" пока вы не присвоите результат снова используя myvideo=ReduceBy2(myvideo)
Подразумевание last

Что если вы не присваиваете результат выражения переменной? Ответ - результат будет присвоен специальной переменной именуемой "last", как если бы строка начиналась "last=". last обычно подразумевается в двух других ситуациях: первое, если мы используем фильтр, и фильтр имеет один параметр clip первым в своём списке аргументов, который вы не указываете; и второе, когда скрипт заканчивается, видео-клип в last берётся как "значение возврата" скрипта это видео клип, который видит приложение открывая скрипт.

Эти три правила, взятые вместе, причина по которой примеры линейного редактирования в первой части были работоспособны без явных переменных. Вот один из ранних примеров, переписанный полностью явно:
last = Version
last = ReduceBy2(last)
last = FadeOut(last, 15)
return last

Команда return использованная здесь должна сама себя объяснять, но если хотите можете посмотреть в описании.

Неявное использование last может быть полезно даже в нелинейном редактировании. К примеру если мы хотим загрузить AVI файл, извлечь две сцены из него и объединить их вместе с видимым перекрытием между ними, то можно записать что-нибудь вроде:
AVISource("capture.avi")
Dissolve(10, Trim(123,456), Trim(789,1000))

Здесь два фильтра Trim и каждый использует клип, который последним был присвоен last - который в этом случае результат выполнения AVISource.
Объёктно-ориентированная запись

Уже упоминалось, что трехстрочный пример с Version/ReduceBy2/FadeOut может быть переписан в виде:
FadeOut(15, ReduceBy2(Version))

Пример рабочий, но несколько сбивающий с толку. Из-за одной вещи - порядок написания функций обратен порядку, в котором они выполняться (проблема донимавшая математиков веками). И ещё одна вещь, по мере добавления функций вы получаете всё больше и больше окружающих скобок, и трудно сказать как много их надо в конце.

AVISynth поддерживают другой стиль записи вызовов функций, называемый стилем "ООП записи", который представляется лучше функционального стиля" во многих ситуациях. Применяя стиль "ООП записи" можно записать вышеупомянутый скрипт так:
Version.ReduceBy2.FadeOut(15)

Это напоминает синтаксис вызова метода используемый во многих объектно-ориентированных языках программирования, таких как C++ и JAVA. Вот ещё пример:
myvideo = AVISource("capture.avi")
return Dissolve(10, myvideo.Trim(123,456), myvideo.Trim(789,1000))

Недостаток стиля ООП записи в том, что он может использоваться только с фильтрами типа Trim которым требуется один параметр видео-клип, но не с фильтрами типа Dissolve которым требуется несколько.

Остаётся верным то, что переменная не изменяется, пока ей ничего не присвоили, так что если вы напишите myvideo.ConvertToRGB(), то конвертированная версия клипа будет помещена в last и myvideo останется неизменным.


###########################################################
# Этот файл обеспечивает стандартный интерфейс AVISynth к #
# различным плагинам VirtualDub. Его можно загрузить в    #
# свой скрипт командой:                                   #
#                                                         #
# 	 Import("vdfilters.avs")			  #
###########################################################

#########################################################
# Измените VirtualDub_plugin_directory ниже на истинный #
# путь к директории содержащей	ваши плагины VirtualDub #
#########################################################

global VirtualDub_plugin_directory = "d:\virtualdub\plugins"

##############################
# 2D Cleaner by Jim Casaburi #
##############################

function VD_2DCleaner(clip clip, int "threshold", int "radius", bool "interlaced")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\2dclean.vdf", "_VD_2DCleaner")
    return clip._VD_2DCleaner(default(interlaced,false)?1:0, threshold, radius)
}

####################################
# Temporal Cleaner by Jim Casaburi #
####################################

function VD_TemporalCleaner(clip clip, int "threshold", int "pixel_lock",
        \	int "threshold2", int "pixel_lock2", int "scene",
        \	bool "partial", bool "yuv")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\tclean.vdf", "_VD_TemporalCleaner", 10)
    return clip._VD_TemporalCleaner(default(threshold,10), default(pixel_lock,4),
        \  default(threshold2,16), default(pixel_lock2,8), default(scene,30),
        \  default(partial,false)?1:0, default(yuv,true)?1:0)
}

############################
# Colorize by Donald Graft #
############################

function VD_Colorize(clip clip, int "hue", int "sat", int "lum")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\colorize.vdf", "_VD_Colorize")
    return clip._VD_Colorize(default(hue, 0), default(sat, 150), default(lum, 150))
}

#############################
# Deflicker by Donald Graft #
#############################

# Двух-проходный фильтр, не поддерживается.
# Возможно будет переписан как фильтр AVISynth

############################################
# Hue/Saturation/Intensity by Donald Graft #
############################################

function DG_FloatToInt(f) { return round((default(f,1.0) - 1) * 100) }

function VD_Hue(clip clip, int "hue", bool "preserve_luma", float "sat", float "inten",
        \	bool "r", bool "g", bool "b", bool "y", bool "c", bool "m")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\hue.vdf", "_VD_Hue")
    hue = default(hue, 0)
    sat = DG_FloatToInt(sat)
    inten = DG_FloatToInt(inten)
    flags = (default(r,true)?1:0)+(default(g,true)?2:0)+(default(b,true)?4:0)
        \ +(default(y,true)?8:0)+(default(c,true)?16:0)+(default(m,true)?32:0)
    return clip._VD_Hue(hue, default(preserve_luma,false)?1:0, sat, inten, flags)
}

#############################################
# Red/Green/Blue Adjustment by Donald Graft #
#############################################

function VD_RGBAdjustment(clip clip, float "r", float "g", float "b")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\rgb.vdf", "_VD_RGBAdjustment")
    return clip._VD_RGBAdjustment(DG_FloatToInt(r), DG_FloatToInt(g), DG_FloatToInt(b))
}

#############################
# Smart Bob by Donald Graft #
#############################

# входной клип должен пройти через SeparateFields. Возможно вам
# понадобится AssumeFrameBased, AssumeFieldBased, или ComplementParity
# перед ним.

function VD_SmartBob(clip clip, bool "show_motion", int "threshold", bool "motion_map_denoising")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\bob.vdf", "_VD_SmartBob", 1)
    return clip.SeparateFields._VD_SmartBob(clip.GetParity()?1:0,
        \  default(show_motion,false)?1:0, default(threshold,10),
        \  default(motion_map_denoising,true)?1:0)
}

########################
# Logo by Donald Graft #
########################

function VD_Logo(clip clip, int "x", int "y", int "alpha", bool "transparent",
        \ int "xr", int "xg", int "xb", string "filename",
        \	bool "animate", int "start", int "duration", int "loops")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\logo.vdf", "_VD_Logo", 1)
    return clip._VD_Logo(default(x,0), default(y,0), default(alpha,128),
        \ default(transparent,true)?1:0, default(xr,0), default(xg,0), default(xb,255),
        \ default(filename,"d:\virtualdub\plugins\logo.bmp"),
        \ default(animate,false)?1:0, default(start,0), default(duration,0), default(loops,0))
}

#####################################
# Smart Deinterlace by Donald Graft #
#####################################

# "Advanced Processing" опция не включена, так-как
# в ней дублируется встроеная функциональность AVISynth

function VD_SmartDeinterlace(clip clip, string "mode", string "channel", bool "show_motion",
        \  bool "blend", bool "motion_map_denoising", int "threshold")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\smart.vdf", "_VD_SmartDeinterlace", 1)
    mode = default(mode, "frame")
    mode = (mode=="frame") ? 0 : (mode=="field") ? 1 : (mode=="both") ? 2 : -1
    Assert(mode>=0, """VD_SmartDeinterlace: "mode" parameter must be "frame", "field", or "both"""")
    channel = default(channel, "luma")
    channel = (channel=="luma") ? 0 : (channel=="all") ? 1 : -1
    Assert(channel>=0, """VD_SmartDeinterlace: "channel" parameter must be "luma" or "all"""")
    return clip._VD_SmartDeinterlace(default(show_motion,false)?1:0,
        \  default(blend,false)?1:0, default(threshold,20), 0, 0, 0,
        \  default(motion_map_denoising,true)?1:0, mode, channel)
}

##################################
# Smart Smoother by Donald Graft #
##################################

function VD_SmartSmoother(clip clip, int "diameter", int "threshold", bool "interlaced")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\smooth.vdf", "_VD_SmartSmoother", 1)
    return clip._VD_SmartSmoother(default(diameter,5), default(threshold,25),
        \  default(interlaced,false)?1:0)
}

################################
# Unsharp Mask by Donald Graft #
################################

function VD_UnsharpMask(clip clip, int "diameter", int "strength", int "threshold",
        \	bool "interlaced", int "mask_top", int "mask_bottom",
        \	int "mask_left", int "mask_right")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\unsharp.vdf", "_VD_UnsharpMask", 1)
    return clip._VD_UnsharpMask(default(diameter,5), default(strength,32),
        \  default(threshold,0), default(mask_left,0), default(mask_right,0),
        \  default(mask_bottom,0), default(mask_top,0), default(interlaced,false)?1:0)
}

##########################
# Subtitler by Avery Lee #
##########################

# не-сглаженный режим не поддерживаентся, так-как
# эмулятор VirtualDub не поддерживает NEEDS_HDC

function VD_Subtitler(clip clip, string filename)
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\subtitler.vdf", "_VD_Subtitler")
    return clip._VD_Subtitler(1, filename)
}

#################################
# Border Smear by Simon Walters #
#################################

function VD_BorderSmear(clip clip, int yt, int yb)
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\brdrsmr.vdf", "_VD_BorderSmear")
    return clip._VD_BorderSmear(yt, yb)
}

################################
# Logoaway by Krzysztof Wojdon #
################################

function VD_LogoAway(clip clip, string "mode", int "x", int "y", int "width",
        \  int "height", int "keyframe", int "color")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\logoaway.vdf", "_VD_LogoAway")
    mode = default(mode, "xblur")
    mode = (mode=="xblur")?1:(mode=="yblur")?2:(mode=="xyblur")?3:(mode=="copy")?4:
        \  (mode=="avgborder")?5:(mode=="solid")?6:0
    Assert(mode>0, "VD_LogoAway: mode must be one of: xblur yblur xyblur copy avgborder solid")
    return clip._VD_LogoAway(mode, default(x,300), default(y,8), default(width,14),
        \  default(height,12), default(keyframe,0), default(color,0))
}

##########################
# Cartoon Tool by flaXen #
##########################

# "Show Inverse Map" не поддерживается, так-как очевидно
# недоступен через интерфейс скрипта

function VD_CartoonTool(clip clip, int "scale_base", int "scale_intensity", int "pixel_base")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\fxtoon.vdf", "_VD_CartoonTool")
    return clip._VD_CartoonTool(default(scale_base,16),default(scale_intensity,200),default(pixel_base,16))
}

########################
# VHS Filter by flaXen #
########################

function VD_VHS(clip clip, bool "stabilize", int "luma_threshold", int "chroma_threshold",
        \	int "temporal_error", int "temporal_bias", int "noise_threshold",
        \	int "pixel_radius", bool "prefilter", bool "postfilter", bool "sharpen",
        \	int "sharpen_amount", bool "eight_direction", int "chroma_shift_x",
        \	int "chroma_shift_y", bool "shift_i", bool "shift_q")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\fxvhs.vdf", "_VD_VHS")
    return clip._VD_VHS(default(stabilize,true)?1:0, default(luma_threshold,5),
        \  default(chroma_threshold,30), default(temporal_error,15), default(temporal_bias,5),
        \  default(noise_threshold,10), default(pixel_radius,1), default(prefilter,false)?1:0,
        \  default(postfilter,false)?1:0, default(sharpen,false)?1:0, default(sharpen_amount,15),
        \  default(eight_direction,false)?1:0, default(chroma_shift_x,-1), default(chroma_shift_y,0),
        \  default(shift_i,false)?1:0, default(shift_q,false)?1:0)
}


soft.crownet.ru | Статьи | Софт | Основы использования утилиты AviSynth при обработке видео

Основы использования утилиты AviSynth при обработке видео

AviSynth (AVI Синтезатор) — это очень полезная программная утилита, основанная на языке скриптов и включающая фильтры для простых (и не очень простых) задач нелинейной обработки видео. Она создана для детального доступа к видеокадрам клипов с возможностью производства над ними ряда хитрых манипуляций (по некоторому сценарию), недостижимых в традиционных монтажных программах (типа VirtualDub или Adobe Premier).© Александр Балахнин aka Fizick (ixbt.com)

1. Что такое AviSynth
2. Установка Avisynth
3. Чем составлять командные AVS файлы-скрипты
4. Основы языка скриптов
5. Открытие файлов-источников видео
6. Работа с чересстрочным видео
7. Фильтры деинтерлейса
8. Преобразование цветовых форматов
9. Коррекция яркости и цвета
10. Изменение размеров, обрезка, бордюры
11. Подавление шума
12. Сравнение действия фильтров
13. Повышение резкости
14. Подавление ореолов
15. Подавление радужных полос
16. Компенсация движения
17. Обработка звука
А еще что есть?

1. Что такое AviSynth

AviSynth (AVI Синтезатор) — это очень полезная программная утилита, основанная на языке скриптов и включающая фильтры для простых (и не очень простых) задач нелинейной обработки видео. Она создана для детального доступа к видеокадрам клипов с возможностью производства над ними ряда хитрых манипуляций (по некоторому сценарию), недостижимых в традиционных монтажных программах (типа VirtualDub или Adobe Premier).

Что делает AviSynth уникальным по интерфейсу, так это тот факт, что он не является самостоятельной программой, имеющей графический интерфейс и производящей выходные файлы. Вместо этого AviSynth действует как «посредник» между видеофайлами и программами обработки видео, то есть как фрейм-сервер (кадр-сервер, податчик кадров).

Работа происходит следующим образом. Во-первых, вы создаете простой текстовый документ, так называемый скрипт (файл с расширением *.AVS), со специальными командами. Эти команды ссылаются на одно или более входное видео и на фильтры, которые вы хотите к ним применить. Затем вы запускаете видеоприложение (программу), например, VirtualDub, и открываете в нем файл скрипта. Тут начинает действовать AviSynth. Он открывает видеоисточники, на которые вы ссылались в скрипте, применяет указанные фильтры, и посылает результат видеоприложению. Приложение, однако, не знает, что это AviSynth работает в фоне. Вместо этого приложение думает, что оно напрямую открывает некий уже отфильтрованный AVI файл, который располагается на вашем жестком диске.

Обычно выделяют пять главных причин, по которым пользователь приходит к AviSynth:

  • AviSynth позволяет вам объединить вместе любое число видеофайлов. Вы можете даже выборочно объединять определенные части видео или заменять звуковые дорожки.
  • Многие очень качественные фильтры видеообработки встроены в AviSynth (или в подключаемые модули-плагины). Например, фильтры для изменения размера, обрезки, подавления шума, повышения резкости, деинтерлейса.
  • AviSynth может открыть почти любой тип видео, включая разные MPEG и Quicktime MOV. Однако когда AviSynth поставляет программе видео, для нее это выглядит подобно стандартному (несжатому) AVI. Это позволяет вам открыть некоторые форматы видео в программах, которые их не поддерживают.
  • AviSynth генерирует видео, которое он посылает программе, порциями, на лету (в памяти). Следовательно, никаких временных или промежуточных видеофайлов на диске не создается (раньше проблема сохранения дискового пространства была более актуальной).
  • Вы можете использовать AviSynth, чтобы открывать файлы, большие, чем 2 GB в некоторых старых программах, которые не поддерживают файлов такого размера.

По устоявшемуся мнению важнейшими достоинствами Avisynth являются:

  • возможность работы в том цветовом формате, который наиболее подходит для входного или выходного видео, без лишних преобразований и с высокой скоростью.
  • произвольный доступ к любому кадру и полю (половине кадра в чересстрочном видео), с возможностью их разделения, прореживания, комбинирования, фильтрации, объединения, изменения частоты и т.п.

AviSynth включает все необходимые базовые инструменты для обработки видео, включая функции-источники для создания (чтения) клипов, фильтры для обработки изображения, фильтры для редактирования, фильтры для работы с чересстрочным видео, звуковые фильтры, специальные и экзотические фильтры, отладочные фильтры.

Это некоммерческая программа с открытым исходным кодом, начало разработки которой положил Бен Рудиак-Гоулд (Ben Rudiak-Gould), разработка которой продолжается группой энтузиастов в тесном контакте с пользователями.

При этом в дополнение к постоянно улучшаемым и шлифуемым базовым функциям, многими независимыми программистами разработано огромное число (до 200) дополнительных подключаемых модулей (плагинов). Эти плагины реализуют разнообразные функции, в том числе весьма сложные методы обработки для улучшения изображения (подавления шума и других дефектов), работы с полями чересстрочного видео и др. Принято деление на плагины, реализующие деинтерлейс и устранение Pulldown, пространственно-временное сглаживание, пространственное сглаживание, временное сглаживание, повышение/смягчение резкости, изменение размеров, субтитры, MPEG декодер, аудио декодер, сравнение качества видео, телевизионное вещание, разнообразные другие.

Путем комбинации различных фильтров в командном файле (скрипте), в том числе с функциями масочных операций и условными фильтрами, могут быть достигнуты наиболее эффективные методы обработки.

Отметим, что большая часть разработчиков, ранее писавших плагины для редактора VirtualDub, как и большинство новых авторов, теперь пишут плагины только для AviSynth, так как это проще и быстрее для разработки (учтите бесплатность программ) и эффективнее по результатам. Поэтому пользователям, стремящимся получить наилучший результат, придется отчасти отходить от визуального интерфейса и осваивать язык AviSynth.

Многие хоть и наслышаны о существовании некоего "чудодейственного Ависинта", не решаются на освоение, когда им советуют с его помощью решить некую задачу ("а может, это в Дубе сделать можно?"). Причин (проблем) три, и они тесно связаны. Во-первых, отпугивает отсутствие "кнопок", метод "тыка" по меню не работает, нужно писать команды вручную. Это хоть и ненастоящее, но все-таки программирование и необходимость думать. Во-вторых, выражения команд хоть и вполне вразумительны, но на английском языке, как и вся документация (весьма качественная, кстати). Эту проблему удалось решить в прошлом году, собрав команду и сделав официальный русский перевод к версии 2.5.6. Однако данный перевод представляет собой больше справочник по командам, а не руководство к использованию — когда, как, и какие скрипты и фильтры применять. Имеющиеся отрывочные сведения в руководствах по "рипанию" DVD очень фрагментарны, особенно на русском языке (да и на английском тоже). Это и является третьей проблемой, как бы оборотной стороной богатства возможностей и разнообразия функций AviSynth и плагинов. Действительно, богатейший опыт людей, отраженных в обсуждениях на форумах, не так-то просто использовать без некоего обобщения. Настоящая статья является попыткой помочь начинающим сделать первые шаги и приобрести навыки составления скриптов на примерах решения некоторых конкретных задач. Но не следует полагать, что всегда выручит слепое копирование приведенных скриптов без тщательного осмысления. Приведенные скрипты несколько упрощены. Равно не следует ожидать, что ваш собеседник на форуме тут же составит оптимальный скрипт за Вас, и настроит все параметры, подходящие для конкретного видео. Сам себе не хочешь помочь — никто не поможет. Попробуйте, и творческий процесс вам понравится! (Автора занесло несколько дальше, и после нескольких лет ожидания момента, когда кто-то в мире напишет программу или фильтр для решения необходимой задачи, он сам взялся за это дело. Сейчас он, пожалуй, не скрипто-писатель, а плагино-писатель, поэтому в статье могут быть некоторые перекосы). Надеемся, опытным пользователям тоже кое-что из данного материала пригодится (ведь каждый — отчасти начинающий). Однако статья не представляет собой обзора всех возможностей AviSynth — напишите продолжение о том, в чем разбираетесь!

2. Установка Avisynth

Для использования Avisynth, его, как и другую программу, надо сначала установить в систему (поддерживаются Windows95 и выше). Загрузив дистрибутив последней стабильной версии (2.5.6a на момент написания статьи), запустите установку, не забыв отметить флажком опции установки английской и русской документации, как на рисунке.

После установки в системе будет в зарегистрирован тип файлов *.AVS и каталог автозагрузки плагинов типа "C:Program FilesAvisynth 2.5plugins". Документация будет доступна в меню Пуск>Программы>Avisynth 2.5>Russian Avisynth Documentation (не забудьте на досуге почитать раздел «о русском переводе»).

3. Чем составлять командные AVS файлы-скрипты

Наиболее естественным методом работы с Avisynth является прямое составление командных файлов-сценариев типа AVS, называемых скриптами, с помощью любого текстового редактора (Блокнот, UltraEdit, редакторы оболочек Total Commander, Far manager, и т.п.). Удобно пользоваться, в частности, подсветкой ключевых слов (например, с плагином Colorer для Far, файл синтаксиса avsColorer3 берите на моем сайте).
Однако именно необходимость ручного написания скриптов отпугивает новичков, хотя создание простого текстового файла не представляет собой какой-то сложности. Достаточно создать текстовый файл (с версии 2.5.7 появилась команда Создать>AviSynth script в меню Windows Explorer), написать в нем строку типа Avisource("d:file.avi") и сохранить файл как Test.avs (скрывать расширения для зарегистрированных типов файлов не рекомендуется).

Существует ряд программ, в которых сделаны попытки автоматизировать написание скриптов AVS для решения частных задач. Это пакеты для модного несколько лет назад перекодирования (рипа) DVD, такие, как AutoGordianKnot, GordianKnot, DVD2AVI, DVDRebuilder (AviSynth во многом развился для выполнения этих задач).

Разрабатывались также несколько редакторов AVS скриптов: AvisynthEditor, AvsGenie, AviSynthesizer, SwiftAvs, DVX, AVSEdit, SyntEditor. Они имеют возможность генерации строк AVS скрипта путем выбора фильтров из меню, в том числе с настраиваемыми параметрами. Однако все же эти редакторы не очень широко используются. Причинами этого, скорее всего, являются, во-первых, их некоторая недоделанность, а во-вторых, заторможенность (из-за использования медленных платформ типа VBasic, NET), и в-третьих, фиксированность набора описаний известных программе фильтров (несмотря на возможность пополнения файлов описаний в формате XML, практически это не делается, так как требует непрерывной кропотливой работы ввиду постоянного обновления существующих фильтров и появления новых). Последнюю проблему может решить появившаяся в последних версиях AviSynth возможность автоматического опроса имен всех имеющихся функций и списка их параметров, что уже реализовано в бета-версии редактора avsFilmCutter. Частично это используется и в широко используемом и рекомендуемом (наряду с Блокнотом) редакторе VirtualDubMod, который представляет собой расширенный вариант известного видеоредактора VirtualDub (хотя и несколько устаревающий, ввиду замораживания разработки — может, кто из российских программистов подхватит?).

Для новичков, возможно, будет удобен VirtualDubMod с русифицированным интерфейсом, однако имеющийся перевод неофициальный и не вполне точный, поэтому в статье описан англоязычный вариант.

Первой полезной функцией VirtualDubMod является возможность автоматического создания скрипта AviSynth при открытии файла по шаблону фильтров-источников AviSource, DirectShowSource, Mpeg2Source (для файлов d2v).

Естественно, возможно открытие существующих файлов AVS-скриптов.
Касательно AviSynth, наиболее интересной возможностью VirtualDubMod является встроенный в него редактор AVS скриптов. Он вызывается из меню Tools->Script Editor.

Типичной задачей при монтаже является выбирание нужных частей видеоклипа и вырезание ненужных. В AviSynth вырезание производится командой TRIM(начало, конец). Естественно, для этого нужен визуальный контроль. Удобна следующая методика: щелчком на маркировочные стрелки выделяем нужную часть клипа в окне просмотра VirtualDubMod (как описано в многочисленных руководствах по VitrualDub), а затем в окне редактора скриптов используем команду меню Edit-->Import Trim With Range для вставки выделенного интервала в виде команд TRIM в то место строки, где стоит курсор (это удобно, если нужно отрезать края). Либо наоборот, в окне просмотра VirtualDubMod выделяем и удаляем все ненужные отрезки (клавишей DEL), и затем в окне редактора скриптов используем команду меню Import Frameset as Trims для вставки набора нужных кадров без удаленных отрезков (это удобно если их много).

Также редактор скриптов позволяет закомментировать (превратить в неисполняемые) определенные строки, что удобно при отладке и подборе набора фильтров. Естественно, эту тривиальную операцию (добавление символа решетки # слева от команды в любой строке) можно сделать и руками. Все символы в строке после решетки считаются комментарием.
Необходимым для отладки скрипта является просмотр результата применения AviSynth фильтров. Нажатием клавиши F5 достигается сохранение скрипта, его применение и обновление результата просмотра того же кадра в окне VirtualDubMod. Более глубокое обновление (открытие скрипта заново) достигается клавишей F7 (это необходимо при изменении числа кадров).

Еще одной автоматически формируемой командой является обрезка кадра Crop, значения формируются в зависимости от примененной Вами обрезки (Cropping) выходного видео в окне VirtualDubMod.

Другие команды AviSynth в окне редактора придется все же писать руками, поглядывая в документацию по Avisynth. Доступные функции установленных внешних плагинов можно посмотреть в меню Help>Avisynth Information.
Прелестной особенностью редактора скриптов является подкрашивание ключевых слов. Базовые функции AviSynth подкрашиваются зеленым, функции плагинов — сиреневым, причем слегка неверный синтаксис подкрашивается красным, цвет меняется по мере набора символов. Названия параметров и их значения редактором не проверяются, поэтому возможны ошибки, о которых сообщает AviSynth при обновлении по F5. Пример окна редактора и сообщения об ошибке («нет функции Trimmm, строка 5 скрипта») приведены на рисунке. Исправьте ошибку и обновите вид.

4. Основы языка скриптов

Так как словарь AviSynth состоит из более чем 100 слов-функций, каждая из которых может имеет несколько параметров, описать их все, и тем более их возможные комбинации в скриптах, в настоящей статье невозможно (обращайтесь к документации).

А ведь есть еще и плагины, причем среди них бывает несколько (от разных авторов), реализующих подобную функцию, но отличающихся в деталях. Особенно много всевозможных денойзеров (подавителей шума). Почти каждый плагино-писатель, видимо, считает себя не реализовавшимся, пока не напишет несколько своих плагинов (автор статьи не исключение). Естественно, это объясняется и разнообразными видами шума. Тем не менее, качество и степень доводки плагинов разные. Некоторые написаны на коленке недоучившимся школьником за час, а некоторые обновляются и совершенствуются последовательно несколькими людьми в течение лет. Описания наиболее полезных и проверенных плагинов включены в документацию по AviSynth. Но, поскольку пристрастия видео-сообщества со временем меняются, наиболее свежую информацию всегда можно найти на форумах. Там же можно найти и разнообразные скрипты, написанные любителями видео в попытках решения своих задач.

Синтаксис скриптов AviSynth (подробно описанный в документации) допускает несколько способов написания, как прямое присвоение переменных, так и объектно-ориентированную запись функций (с точкой), в том числе с возможностью неуказания подразумеваемых переменных.

В скриптах AviSynth основной единицей обработки является видеоклип. Видеоклип является основным (первым, обычно неименованным) аргументом функции. Результатом выполнения функции также является видеоклип, который присваивается переменной с явно указанным именем или подразумеваемой переменной LAST (последний), которая может быть не указана, и является подразумеваемым аргументом следующей функции.

Большинство фильтров имеют дополнительные параметры, позволяющие настроить оптимальный режим обработки для конкретного видеоклипа, обычно все параметры имеют некоторые значения по-умолчанию, так что можно указывать явно только те параметры, значения которых необходимо подстроить.

Во избежание недоразумений отметим, что Ваш файл на жестком диске не меняется при обработке, все кадры клипов создаются в оперативной памяти.

Для подключения в AviSynth дополнительных модулей (плагинов), нужно или поместить их файлы DLL в специальный подкаталог Plugins для автоматической загрузки, либо явно указывать в каждом файле скрипта команду загрузки каждого нужного плагина вида LoadPlugin ("PluginFileName.DLL"). Рекомендуем автозагрузку, но ниже во всех примерах скриптов для информации о необходимых плагинах указаны команды явной загрузки (их можно убрать, закомментировав). Часто имя функции совпадает с именем плагина, но не всегда, плагин может содержать и несколько функций.

5. Открытие файлов-источников видео

Практически любой скрипт включает открытие файлов-источников видео (и аудио). В базовый набор AviSynth входят фильтры-источники для открытия AVI видеофайлов AVISource, DirectShowSource, звуковых файлов WavSource, а также файлов изображений ImageSource. Для чтения ряда других форматов файлов разработаны (и продолжают разрабатываться) отдельные плагины, в том числе RawSource для «сырых» несжатых видеоданных, QTSource для файлов QuickTime, NicAudio для MPEG аудио и др. Для файлов MPEG1 и MPEG2 в настоящее время наиболее отработанным является использование функции Mpeg2Source плагина DGDecode (пакет DGMPGDec, разработчик последних версий Donald Graft aka "neuron2"). Для этого предварительно необходимо воспользоваться программой DGIndex из пакета DGMPGDec, в которой открыть файл MPEG2 и сохранить вспомогательный индексный файл анализа типа D2V, который и должен быть указать в качестве аргумента функции Mpeg2Source.

#Пример скрипта 5.1
# Откроем DVD видео, указав файл индекса D2V
MPEG2Source(d2v="mydvd.d2v")
# Так как результат ничему не присваивается явно, он присваивается LAST

#Пример скрипта 5.2
# Откроем несколько AVI видеофайлов, и объединим вырезки
# переменная A (английская) - клип из файла film1.avi
A = AviSource("D:videofilm1.avi")
# выделим из клипа A нужные кадры с 100 по 999
# и присвоим этот отрезок переменной A1
A1 = Trim(A, 100, 999)
# выделим из клипа A нужные кадры с 3000 по 4000
# и присвоим его переменной A2.
A2 = Trim(A, 3000, 4000)
# переменная B - клип из файла film2.avi
B = AviSource("D:videofilm2.avi")
# Выделим из клипа B первые 501 кадр (пример объектной записи)
B = B.Trim(0, 500)
# Объединим получившиеся три отрезка в результирующий клип
A1 ++ A2 ++ B
# поскольку результат ничему не присваивается явно, подразумевается LAST
# Преобразуем видео в черно-белое (просто как пример некоего фильтра)
GreyScale()
# Так как аргумент не указан явно, функция применяется
# к результату предыдущей операции, то есть LAST
# Так как результат ничему не присваивается явно, он присваивается LAST
return LAST

Результатом выполнения скрипта, передаваемым в вызывающую программу, является либо последнее значение переменной LAST (то есть последний неименованный результат), как в примере 5.1, либо явно указанный для возврата клип (вида Return LAST, или Return A), как в примере 5.2.

Если нужно объединить видео из нескольких входных файлов, то надо в скрипте для каждого файла написать команду открытия, с присвоением в разные переменные. Затем можно каждый клип последовательно подрезать (при необходимости отрезать рекламу, например), и результаты объединить. Удобно открыть первый клип, выполнить обрезку (при необходимости), закомментировать эти строки, затем открыть следующий клип, выполнить обрезку, закомментировать, и т.д. Затем убрать комментарии, добавить команды объединения (плюсы) и получить итоговый объединенный клип.

#Пример скрипта 5.3
# Откроем несколько AVI видеофайлов, и объединим вырезки
# переменная A (английская) - клип из файла film1.avi
A = AviSource("D:videofilm1.avi")
A
A=Trim(100, 999) ++ Trim(3000, 4000) # набор кадров (Frameset)
# переменная B - клип из файла film2.avi
B = AviSource("D:videofilm2.avi")
B
# Выделим из клипа B первые 501 кадр (пример объектной записи)
B = Trim(0, 500)
# Объединим получившиеся отрезки в результирующий клип
A ++ B
# поскольку результат ничему не присваивается явно, подразумевается LAST

Иногда спрашивают, как обратить видео (обратить ход времени) в качестве эффекта. С помощью AviSynth это делается очень просто, функцией Reverse (пока не касаемся вопросов звука).

#Пример скрипта 5.4
# Эффект обращения времени
AviSource("D:videofilm1.avi") # входной видео файл
A = Trim(0, 100) # Отрезок до эффекта
B = Trim(100, 999) # Выделим некоторый отрезок для сцены эффекта
C = Trim(1000, 0) # остаток входного клипа
A ++ B ++ Reverse(B) ++ B ++ C
# Объединили отрезки в результирующий клип из 5 частей (для примера):
# 1. Часть видео до сцены эффекта,
# 2. сцена эффекта с нормальным ходом времени,
# 3. сцена эффекта с обратным ходом времени,
# 4. повтор сцены эффекта с нормальным ходом времени,
# 5. остаток видео до конца

6. Работа с чересстрочным видео

В кино в каждый момент времени снимается кадр целиком. В традиционном (чересстрочном) телевидении и видео (за исключением недавно появившихся прогрессивных стандартов) каждый кадр состоит из строк, образующих два поля, снятых в разные моменты времени. В один момент снимаются четные строки (первое, верхнее поле), в следующий момент — нечетные (второе, нижнее поле), и так далее. Однако кино часто показывают по телевидению (и записывают на DVD), причем в странах с разной системой телевидения и, соответственно, с разными частотами кадров, не совпадающими с частотой кадров кинофильма. В этом случае студии производят повтор или (что хуже) смешение определенных полей по некоему алгоритму (Pulldown). Обработку видео (например, фильтрацию) желательно вести в том виде, в котором оно существовало изначально.

Начнем с рассмотрения простого случая истинного чересстрочного видео, снятого видеокамерой. Наиболее естественным (для сохранения плавности движений) является сохранение чересстрочности при обработке, кодировании и записи DVD. Его обработку целесообразно вести, разделив его на поля, или использовать функции-фильтры, имеющие опцию обработки видео как чересстрочного.

Avisynth имеет функцию SeparateFields для разделения кадров видео на поля (с удвоением частоты) и функцию Weave для их обратного сцепления в кадры.

#Пример скрипта 6.1.
# Применение пространственного фильтра
# к чересстрочному видео, разделенному на поля
LoadPlugin("C:PluginsVagueDenoiser.dll") # загружаем плагин
AviSource("d:videofilm.avi") # открываем видеофайл
Separatefieds() # разделяем видео на поля
VagueDenoiser(threshold=2) # фильтруем каждое поле пространственным фильтром
Weave() # соединяем поля в кадры

В данном примере 6.1 мы использовали для снижения шума один из лучших пространственных фильтров (функция VagueDenoiser), который исполнен как плагин (файл VagueDenoiser.dll, разработчики "Lefungus", "Kurosu", "Fizick"), и поэтому сначала должен быть загружен (автоматически или явно, наглядней в начале скрипта). Сила (порог) фильтрации задан параметром threshold=2, остальные параметры со значениями по умолчанию.

Еще обратите внимание на такую мелочь, что в функциях без аргументов мы пишем пустые скобки (работать фильтр будет и без них, но без кэширования, медленнее — это будет исправлено с версии AviSynth 2.5.7).

#Пример скрипта 6.2
# Применение к чересстрочному видео пространственного фильтра,
# имеющего опцию работы чересстрочно (interlaced)
LoadPlugin("C:PluginsVagueDenoiser.dll") # загружаем плагин заранее
AviSource("d:videofilm.avi") # открываем видеофайл
# фильтруем каждое поле пространственным фильтром,
# включив опцию чересстрочности
VagueDenoiser(threshold=2, interlaced=true)

Более сильную фильтрацию обеспечивают временные фильтры, учитывающие информацию и о соответствующих точках в соседних кадрах, или пространственно-временные, рассматривающие соседние точки в пространстве и во времени.

Так как строки содержат информацию о сдвинутых по вертикали на одну строку точках, то после разделении на поля информация в соответствующих строках не относится к тому же месту пространства, и не должна быть смешена. Поэтому из потока полей выделяют поток четных полей и поток нечетных полей, в каждом из которых информация относится к соответствующим (несмещенным) точкам.

#Пример скрипта 6.3
# Применение пространственно-временного фильтра к чересстрочному видео
# с разделением на четные и нечетные поля
LoadPlugin("C:PluginsDeGrainMedian.dll") # загружаем плагин
AviSource("d:videofilm.avi") # открываем видеофайл
Separatefieds() # разделяем видеокадры на поля
Even = SelectEven() # Выделяем четные (0,2,4…) поля в переменную Even
Even = DeGrainMedian(Even) # фильтруем четные поля и замещаем результатом
Odd = SelectOdd() # Выделяем нечетные (1,3,5,…) поля в переменную Odd
Odd = DeGrainMedian(odd) # фильтруем четные поля и замещаем результатом
Interleave(even, odd) # чередуем четные и нечетные поля,
# собирая исходную последовательность (0,1,2,3,4,5…)
Weave() # соединяем поля в кадры

Некоторые фильтры имеют опцию обработки чересстрочного видео, при этом они реализуют этот же алгоритм раскладки на поля внутренне, в этом случае скрипт упрощается.

#Пример скрипта 6.4
# Применение к чересстрочному видео пространственно-временного фильтра,
# имеющего опцию работы с чересстрочным видео
LoadPlugin("C:PluginsDeGrainMedian.dll") # загружаем плагин
AviSource("d:videofilm.avi") # открываем видеофайл
DeGrainMedian(interlaced=true) # фильтруем чересстрочно

7. Фильтры деинтерлейса

Деинтерлейс применяют для удаления эффектов «гребенки» чересстрочного видео для комфортного просмотра на мониторе компьютера. Можно выделить случай, когда видео изначально было прогрессивным (фильмом), для преобразования в видео было применено некое чередование полей (telecine, pulldown), и нам необходимо выделить из видео последовательность оригинальный кадров. При этом имеется в виду, что смешения полей нет, и вся трудность просто в нахождении нужных. В простом случае фильма в NTSC можно воспользоваться базовой функцией Pulldown. Можно использовать и детально использовать богатые возможности AviSynth по разложению на поля, их ручном анализе, и составлением некоторого скрипта для их комбинации. В более сложных реальных случаях для автоматизации процесса целесообразно применять плагины DeComb (разработчик Donald Graft) или TIVTC (разработчик "Tritical"), реализующие методы подбора полей (field matching) из нескольких соседних кадров для восстановления прогрессивных кадров, в основном для формата NTSC, в том числе из гибридного видео и др. Оба плагина состоят из двух главных функций, на первом этапе осуществляющих подбор подходящих полей и формирование кадров, а на втором этапе - отбрасывание ненужных дубликатов (децимацию). Между собой они могут общаться с помощью подсказок, спрятанных в кадре. Плагин TIVTC активно разрабатывается в настоящее время и имеет несколько больше возможностей. Основными (базовыми) параметрами его функции TFM являются:

  • "order" - порядок полей (0 - BFF, 1 - TFF, -1 = из AviSynth, по умолчанию);
  • "mode" - режим от 0 до 6, грубо чем больше, тем больше соседних полей пробуется, и еще спец.режим 7, по умолчанию =1 (два соседних поля и одно следующее при неудаче);
  • "PP" - пост-обработка, от 0 до 7, что делать с плохими кадрами (с гребенкой) при неуспехе подбора полей, имеется в виду возможность по-пиксельного деинтерлейса (0 - без обработки, 1 - искать плохие, выводить подсказку, но не обрабатывать, 2 - простой деинтерлейс смешением, 3 - простой деинтерлейс кубической интерполяцией, 4 - простой деинтерлейс с улучшенными краями (ELA), 5 - адаптивный к движению деинтерлейс смешением, 6 - адаптивный к движению деинтерлейс кубической интерполяцией, 7 - адаптивный к движению деинтерлейс с улучшенными краями (ELA), по умолчанию =6).

В разработках "Tritical" TIVTC и TDeint мы видим сближение методов деинтерлейса по полям и по точкам.

#Пример скрипта 7.1
# Простой подбор полей для PAL без децимации
MPEG2Source("d:videofilm.avi") # файл видео
TFM(mode=1, PP=6)
# делаем деинтерлейс подбором полей и пост-обработкой

Для мультфильмов рекомендуют режим PP=7 со сглаженными наклонными краями. Для NTSC необходима еще и функция децимации TDecimate сразу за TFM. Функции имеют многочисленные настроечные параметры, в том числе для прямого задания пользователем типа деинтерлейса для конкретных кадров.

Разработаны также сложные AVS скрипты для трудных случаев восстановления прогрессивных кадров из потока после телекино-преобразования, в том числе и частично смешенных (blended) полей, такие как Restore24 (составители "scharfis_brain", "Didee"), CRestore (составитель "MOmonster"). Автор не является в этом вопросе опытным, однако рассмотреть их целесообразно. Ограничимся кратким описанием последней, не приводя саму функцию скрипта (найдете ее в архиве avs.zip). В ней сначала производится вычисление масок сравнения, а затем покадровые вычисления и нахождение наиболее походящих полей с использованием команд условной обработки ScriptClip и FrameEvaluate. Параметрами функции Crestore являются:

  • mode: режим детектирования смешенных полей, от -1 до 10, по умолчанию 0.
    меньше 0 - быстрые режимы, больше 0 - высококачественные. Чем больше модуль, тем выше влияние движения, 0 - без влияния движения. Для природы хорошо от 0 до 2, для мультфильмов до 4-5.
  • rate: выходная частота кадров, обычно 23.976 (по умолчанию) или 25 fps, прореживания не производится.
  • bthresh: порог детектирования смешения. От 0 до 99 - простое использование порога.
    Выше 99 - специальная обработка. Если текущий кадр имеет большую вероятность смешения, чем соседние, и фактор выше bthesh/100-1, то это - смешение (blend). По умолчанию 120.
  • dl: предел детектирования для mode >= 0. Не учитываются пикселы с меньшей разницей. От 0 для хороших источников до 2-4 для мультфильмов, по умолчанию 1
  • clip2: необязательный вспомогательный (очищенный) клип (bobbed) для более надежного детектирования.
  • nomo: точка отсутствия движения. Разности смешенных пикселов вычитаются из нее, чистых пикселов прибавляются. Хорошие величины 255, 128. Для bthresh<99 и блочных источников установите от 4 до 48. По умолчанию 128.
  • mthresh: для простого порога движения. При разности кадров меньше mthresh, смешение не будет детектировано. По умолчанию 0.16
    •

Функция Crestore (в последнем варианте 1.0) использует функции плагина MaskTools (разработчик "Manao") новой версии 2.0, на ее входе должно быть видео после Боб-деинтерлейса (кадры удвоенной частоты и полной высоты, из каждого поля, см. ниже). Функцию можно, например, импортировать из файла.

#Пример скрипта 7.2
# Восстановление прогрессивных кадров из потока после телекино
LoadPlugin("C:Pluginsmt_masktools.dll") # для масок
LoadPlugin("C:PluginsDGdecode.dll") # для MPEG2
LoadPlugin("C:PluginsTDeint.dll") # для Боб-деинтерлейса
Import("crestore.avs") # импортируем файла скрипта с функцией Mpeg2Source("d:videofilm.d2v") # открываем файл видео
# подразумеваем, что из MPEG2 получен правильный порядок полей TDeint(mode=1) # делаем Боб-деинтерлейс
# И вызываем функцию для восстановления прогрессива Crestore(mode=0, rate=25, bthesh=120)
# попробуйте подобрать некоторые параметры

Другой случай — применение деинтерлейса с восстановлением смежного поля некоторой интерполяцией точек изображения, обычно с некоторой адаптацией к движению (по-разному в статичных и движущихся областях). Для изначально чересстрочного видео деинтерлейс вообще-то вреден, так как уменьшается плавность движений, но иногда он нужен при обработке фильмов.

Имеются классический плагин KernelDeint (разработчик Donald Graft) и его оптимизированная версия LeakKernelDeint (разработчик "Leak"), великолепный быстрый TomsMoComp (разработчик Tom Barry) с небольшой компенсацией движения, и развивающийся в настоящее время продвинутый TDeint (разработчик "Tritical") с пониженной ступенчатостью краев объектов, анализом перекрывающихся областей и другими режимами.

#Пример скрипта 7.3
# Деинтерлейс
LoadPlugin("C:PluginsTomsMoComp.dll") # загружаем плагин
LoadPlugin("C:PluginsDeGrainMedian.dll") # загружаем плагин
AviSource("d:videofilm.avi") # аналоговое видео
AssumeTFF() # сообщим порядок полей - верхнее поле первое
#Info() # Уберите знак комментария для просмотра свойств
TomsMoComp(-1, 5, 0) # делаем деинтерлейс
DeGrainMedian(interlaced=false) # фильтруем прогрессивно

В данном примере мы используем вызов функции TomsMoComp с первым параметром -1, что означает (согласно документации) считать порядок полей тем, каким его считает AviSynth. Это довольно тонкий вопрос. В записанном видеофайле AVI не хранится информация о чересстрочности, и отсутствует информация, какое поле в кадре первое во времени. Известно, однако, что для AVI файлов формата DV (с цифровых видеокамер) первое поле - всегда нижнее. Именно это значение считает AviSynth по умолчанию для любого видео, если нет явного задания порядка полей. Отметим, что в большинстве плат захвата аналогового видео (в том числе на чипах Philips) — верхнее поле является первым. В рассмотренном примере мы явно указали, что верхнее является первым (Top Field First). При неверно указанном порядке полей ряд функций будет работать неправильно. В файлах MPEG2 такая информация имеется, и она передается в AviSynth при использовании MPEG2Sourсe пакета DGDecode.

В этом случае, как и во многих других, полезно использовать отладочный фильтр Info(), который печатает поверх кадра некоторую информацию о свойствах некоторого клипа (по умолчанию — LAST) в данном месте скрипта.

Выбор лучшего фильтра деинтерлейса неоднозначен. При обработке фильмов PAL рекомендую попробовать TDeint, который имеет большое число настроечных параметров, в том числе и режим анализа перекрывающихся областей, адаптивного перехода к автоматическому подбору наиболее подходящих соседних полей (параметр tryWeave), есть в нем и режим сглаживания ступенек (параметр mode=3). Но начать можно с настроек по умолчанию. Преимуществом TomsMoComp является компенсация движения (хоть и в пределах 1-2 пикселов).

Еще одним специальным видом деинтерлейса является так называемой Боб (английское Bob) — преобразование каждого поля в полноформатный кадр, с сопутствующим увеличением частоты кадров вдвое, из 25 в 50 Гц (каждое поле, а теперь кадр, соответствует своему моменту времени). Это создает видео, очень плавно меняющееся во времени, что используется в ряде программ просмотра MPEG и телевидения. Во встроенном фильтре Bob промежуточные строки строятся путем бикубической интерполяции соседних строк (с некоторым смещением). В более разумных (Smart) бобберах частично адаптивно используется информация из соседних полей. Практически каждый фильтр деинтерлейса имеет и этот режим: KernelBob, LeakKernelBob, TDeint. Боб-деинтерлейс часто используют при пост-обработке для просмотра видео на мониторе в реальном времени, но и в Avisynth он тоже находит применение. Его используют при преобразовании телевизионных форматов с разной частотой кадров и прогрессивностью (PAL-NTSC). Есть у него некоторые преимущества и при фильтрации шумов. Так как имеем фактически прогрессивный выход с удвоенной частотой, то временной интервал меньше в два раза, чем при обработке временным фильтром интерлейсного клипа с разложением на четные и нечетные строки. Недостатком является меньшая скорость работы и некоторое вертикальное покачивание (bobbing) статичных объектов даже для разумных бобберов.

#Пример скрипта 7.4
# Фильтрация боб-деинтерлейсного видео
LoadPlugin("C:PluginsDeGrainMedian.dll") # загружаем плагин
AviSource("d:videofilm.avi") # аналоговое видео
AssumeTFF() # сообщим порядок полей - верхнее поле первое
TDeint(mode=1) # боб-деинтерлейс, полные кадры
# четные строки - исходные, нечетные - интерполяция,
# в следующем кадре наоборот
DeGrainMedian(interlaced=false) # фильтруем прогрессивно
AssumeFrameBased() # полагаем что кадр
SeparateFields() # разделим на поля
SelectEvery(4,1,2) #выделим из четырех второе и третье поле
Weave()

Отметим, что даже если некоторый фильтр деинтерлейса не имеет режима BOB (например, TomsMoComp), его можно реализовать, применяя поочередно к исходному и смещенному на одно поле видео, что может быть записано с помощи функции.

#Пример скрипта 7.5
# Определение функции TomsBob (составитель scharfis_brain)
function tomsbob(clip i)
{
interleave(i.tomsmocomp(-1, 0, 0),
i.doubleweave().selectodd().tomsmocomp(-1, 0, 0))
assumeframebased()
getparity(i) ? assumetff() : assumebff()
}

Для использования этой функции в приведенном выше примере скрипта, запишите ее определение в скрипт (перед основным текстом), и используйте вызов Tomsbob() вместо строки TDeint(mode=1).

8. Преобразование цветовых форматов

В отличие от большинства программ, ведущих обработку в трех цветовых каналах RGB (красный, зеленый, синий), AviSynth может обрабатывать видео в цветовом пространстве YUV (яркость и две цветоразности, цветности), в которых обычно ведется вещание и хранится сжатое видео. Эти форматы хранения видео обычно сокращенные (прореженные) для цветности. В формате YUY2 цветность прорежена в два раза по горизонтали, а в формате YV12 (используемом в DVD) - и по вертикали. Желательно обходиться без преобразования цветового формата, но иногда это невозможно из-за несовпадения требуемого выходного формата с входным, или ограничений некоторого конкретного фильтра, в котором автором не реализована поддержка какого-то формата.

В частности, при подаче выходных кадров для кодировки в TMPGenc необходим формат RGB, как и при подключении в Avisynth плагинов от VirtualDub (такая возможность имеется), а в Canopus Procoder лучше подавать YUY2.

В AviSynth встроены все необходимые функции для преобразования (конвертации), с именами типа ConvertToXXX, где XXX - это требуемый формат (RGB, YUY2, YV12).

Отметим, что обработка производится быстрей в сокращенных форматах (меньше объем данных), особенно для YV12, в котором данные по каждой цветовой плоскости хранится в отдельном массиве памяти (планарно). Рассмотрим пример, когда некоторый фильтр работает только в YV12 (это типично для новых плагинов), а источник типа YUY2.

#Пример скрипта 8.1
# Преобразование цветового формата
LoadPlugin("RemoveGrain.dll") # загрузим плагин заранее
AviSource("d:videofilm.avi") # аналоговое видео YUY2
AssumeTFF() # сообщим порядок полей - верхнее поле первое
# Преобразуем клип в цветовой формат YV12
ConvertToYV12(interlaced=true) # опция для чересстрочного
SeparateFields() # разделяем на поля
RemoveGrain(mode=17) # функция работает только в YV12
Weave() # собираем поля

В данном примере мы использовали просто для иллюстрации плагин RemoveGrain (разработчик "Kassandro") — удалитель зерна (пространственный шумоподавитель) в одном из его многочисленных режимов.

В скрипте следует обратить внимание на то, что команда преобразования формата ConvertToYV12 использована с параметром interlaced=true, это необходимо для правильного преобразования, если видео — чересстрочное. Еще следует обратить внимание, что преобразование цветового формата в скрипте производится с полнокадровым видео, до разделения видео на поля, то есть не рекомендуется преобразовывать цветовой формат разделенного на поля видео, иначе результат будет неверен (немного искажены цвета).

Еще следует иметь в виду, что при преобразовании из RGB в YUV AviSynth сокращает диапазон яркостей (а при обратном — расширяет). Позволю напомнить, что хоть диапазон, хранимый в байте может быть от 0 до 255, и это нормальный диапазон для формата RGB, то для формата YUV ситуация другая. В телевидении допустимыми значениями являются от для яркости 16 до 235 и от 16 до 240 для цветности. Поэтому, строго говоря, яркость не должна выходить за эти безопасные пределы (ниже "уровня черного" и выше "уровня белого"), они должны быть обрезаны (параметр coring). Однако в компьютерах такие значения часто реализуются и нормально отображаются, как и в телевидении высокого разрешения HDTV. При необходимости можно произвести коррекцию.

9. Коррекция яркости и цвета

В AviSynth есть несколько способов коррекции цвета (встроенные фильтры Levels, Tweak, ColorYUV и некоторые другие). Наиболее мощным является ColorYUV (пожалуй, он перегружен числом режимов). Усиление, смещение, гамма и контраст могут быть установлена для каждого яркостного или цветового канала Y,U,V. Просто меняйте значения соответствующих параметров, обновляйте изображение (F5 в VirtualDubMod) и наблюдайте результат. Однако часто визуального контроля недостаточно. В функции ColorYUV имеется очень полезный режим Analyze=true для анализа максимума и минимума каналов и вывода чисел на кадр.

#Пример скрипта 9
# Анализ и коррекция яркости (можно и цвета)
AviSource("film.avi")
ColorYUV(gain_y=10, off_y=0, gamma_y=0, cont_y=0) # яркости
ColorYUV(analyze=true) # анализ результата

Естественно, после настройки яркости строчку с анализом надо убрать или закомментировать.

В случае если диапазон YUV так широк, а нужен безопасный для телевидения, его можно сузить специальной командой ColorYUV(levels="PC->TV"), а если превышения небольшие, лучше подрегулировать усиление, смещение, гамму, или контраст перед обрезкой (ограничением). Обратите внимание, что анализ выдает не только абсолютные максимум и минимум, но и нестрогий (loose) максимум и минимум, который превышают очень небольшое число точек (часто случайных, краевых). Часто можно ими пожертвовать и ограничить, не корректируя остальную картинку.

Для полноты стоит отметить, что во многих DVD и HDTV источниках используется набор коэффициентов преобразования в RGB, слегка отличный от используемого в AviSynth и DivX, и для коррекции этого существует плагин ColorMatrix (разработчики Wilbert Dijkhof и др.) с одноименной функцией.

Коррекцию цвета лучше делать в начале скрипта, но некоторые фильтры (смена размеров, повышение резкости) могут расширить интервал, поэтому при необходимости в конец можно добавить команду Limiter().

10. Изменение размеров, обрезка, бордюры

В начале века было популярно перекодирование DVD в формат MPEG4 (DivX и т.п.) и запись на CD. При этом уменьшали размер кадра, чтобы уменьшить объем информации, и чтобы программный проигрыватель справился с воспроизведением. Сейчас настало время, когда начали увеличивать размер кадра с DVD для воспроизведения на телевизорах высокого разрешения. Но иногда необходимо изменить размер кадра видеоклипа и по другим причинам. В Avisynth встроены несколько качественных и быстрых функций изменений размеров кадра путем интерполяции, отличающиеся числом опорных точек (порядком) интерполяции. Обычно для увеличения размеров рекомендуют использовать бикубическую или Ланкзос-интерполяцию, а для уменьшения размеров - Ланкзос для резкой или билинейную для мягкой (иногда другие). Изменение размеров в скрипте делается чаще после основной обработки (подавление шума, и т.п.). Отметим, что кроме точечной и билинейной, другие типы могут увеличить резкость, и несколько расширить диапазон интенсивностей (может понадобиться ограничение типа Limiter). При обработке чересстрочного видео, изменение вертикального размера необходимо производить после деинтерлейса (или после разложения видео на поля).

Иногда появляется задача записать на DVD видеоролик, снятый цифровым фотоаппаратом с разрешением не выше 640х480. Можно его записать в формате NTSC, другим решением будет привести его к формату DVD PAL-Video (пока обойдем вопрос другой частоты кадров).

#Пример скрипта 10.1
# Обработка с изменением размеров кадра видеоролика с фотика
DirectShowSource("d:videophoto.mov")
# открываем файл типа QuickTime
LanczosResize(720,576) # новые размеры

Можно применить и еще более продвинутые методы увеличения размеров, в частности плагины EDIUpsizer, EEDI2 (разработчик - "Tritical"), или Sangnom (разработчик - "MarFD"), подавляющие ступеньки на диагональных линиях. Они могут качественно увеличить кадр по вертикали в два раза, после этого до нужного размера его надо довести базовыми функциями (LanczosResize).

В Avisynth еще имеется быстрая функция Reduceby2 сокращения вдвое, но она дает сдвинутую на полпиксела картинку. Еще стоит отметить полезность функции PointResize точечного увеличения (дублирования пикселов без интерполяции), она очень полезна для 2-4 кратного увеличения кадра (области) для его тонкого разглядывания.

Другим способом изменения размеров кадра является обрезка или добавление бордюров. Так, например, можно обрезать мусор при захвате VHS; естественно, при кодировании DVD число строк менять нельзя, и на место обрезанных строк нужно добавить бордюры. Это можно сделать и одной функцией Letterbox. Поскольку современные чипы аналогового захвата внутри работают с разрешением 704 пиксела в строке, целесообразно вести захват в данном разрешении, а потом для правильного аспекта добавить бордюры до 720.

#Пример скрипта 10.2
#Добавление бордюров и обрезка
AviSource("film.avi") # захваченное видео 704х576
AddBorders(8,0,8,0) # Добавим справа и слева по 8 черного
Crop(0,0,0,-16) # Обрежем снизу, например, 16 мусора
Addborders(0,0,0,16) # И добавим снизу 16 черного

Некоторые предпочитают заливать не строго черным с резкой границей (которую желательно делать кратной 8 или 16), а с плавной, для этого есть схожие плагины BorderControl (разработчик Simon Walters) и FillMargins (разработчик Tom Barry).

11. Подавление шума

Под шумом видео мы понимаем случайные, не связанные между собой во времени и пространстве процессы, независимо в каждом пикселе. Помехи - это другое, они представляют несколько упорядоченные узоры, например, зерна (кластеры) из нескольких точек, полосы и т.п.

Примечание. Подавление шума — пожалуй, одна из распространеннейших функций. Подавить его стремятся по двум причинам. Во-первых, чтобы улучшить визуальное качество, а во-вторых, чтобы улучшить сжимаемость при кодировании в MPEG. Однако, удаление шума — это всегда компромисс, фильтр неизбежно вместе с ним удалит и часть деталей объекта. Мое мнение таково — если шума немного, то может лучше его не трогать? Просто добавьте битрейт, если это возможно. А если шума много, удалить его безболезненно тем более не получится. Лучше недочистить, чем перечистить и наблюдать пластилиновые фигуры и квантованные переходы.

За время существования AviSynth (с 2001 г.) разработано большое число различных фильтров, реализующих различные алгоритмы, и разными людьми за время существования составлено немалое количество простых и сложных комбинированных скриптов, в целях добиться идеала (оптимума для конкретного источника и вида шума).

Естественно, сложные алгоритмы дают малую скорость обработки, что может оказаться неприемлемо при большом объеме работы.

Из не потерявших актуальность фильтров отмечу пространственные Undot (удаляет отдельные выпадающие пикселы, разработчик Tom Barry), WNR (разработчик "Thejam") , VagueDenoiser (разработчики "Lefungus", "Kurosu", "Fizick"), оба основаны на вейвлетах, из временных фильтров - CNR2 (для цветности, разработчики "MarcFD", "Tritical"), PeachSmoother (разработчик "Lindsey Dubb"), оба с рекурсивной обработкой длинных последовательностей кадров), а из пространственно-временных фильтров, учитывающих соседние пикселы из текущего и нескольких смежных кадров — FluxSmooth (простой, разработчик Ross Thomas), Deen (3D-конволюция, то есть свертка, разработчик "MarcFD"), Dust (с компенсацией движения, разработчик "Steady"). Из новых фильтров отмечу RemoveGrain (высокооптимизированный по скорости пакет из нескольких фильтров с множеством режимов, разработчик "Kassandro", собственно функция RemoveGrain — пространственный фильтр), упомянем и "сладкую парочку" автора: DeGrainMedian (быстрый) и FFT3DFilter (медленный), оба они пространственно-временные. Какой же вам использовать? Трудно быть объективным, и уж, поскольку каждый автор считает свои детища лучшими, рекомендуем попробовать последние. Однако и с другими фильтрами и скриптами можно получить хорошие результаты, в любом случае это только инструменты, которыми надо овладеть и применять умеючи.

Стоит отметить, что большинство фильтров имеют настроечные параметры, которыми, в частности, задается порог величины вариации сигнала, ниже которой он считается шумом, и ряд других тонкостей конкретного алгоритма. Видеосигнал часто имеет разное качество и величину шума для каналов яркости и цветности, например, высокий цветовой шум DV камер на темных сценах, цветные помехи и низкое цветовое разрешение VHS записей, при этом необходимо использовать более высокие значения параметров фильтрации для цветовых каналов U,V, чем для яркостного канала Y.

Простые скрипты для подавления шума приведены в примерах 6.1-6.4. Фильтр DeGrainMedian прост и быстр, он ограничивает выпадающие пикселы на основе похожести 13 диаметральных пар соседних точек (в текущем, предыдущем и последующем кадрах), компенсируя небольшие смещения (на один пиксел) и адаптивно переключаясь на пространственную фильтрацию при большом изменении интенсивности. В отличие от большинства других фильтров, которые не изменяют пиксел, если от отличается от соседей больше чем на порог, DeGrainMedian изменяет такой пиксел, но на ограниченную величину. Поэтому он может уменьшить весьма сильный шум с выпадающими пикселами. Режим работы (степень влияния центрального оригинального пиксела) регулируется параметром "mode", а предел изменения — параметром "limitY" для яркости (Y) и "limitUV" для цветности (U,V).

При захвате аналогового видео часто наблюдается некоторая полосатость (помехи в виде горизонтальных линий). Предусмотрен специальный режим работы DeGrainMedian, активизирующийся параметром "norow=true", при котором соседние пикселы в той же строке не учитываются.

#Пример скрипта 11.1
#Фильтрация аналогового чересстрочного видео.
LoadPlugin("C:PluginsDeGrainMedian.dll") # загружаем плагин
AviSource("d:videofilm.avi") # открываем видеофайл
DeGrainMedian(mode=1, interlaced=true, norow=true, limitY=3, limitUV=5)
# режим подавления горизонтальных полос и больший предел для цветности

При недостаточной степени снижения шума можно увеличить пределы, но иногда более эффективным оказывается каскадное применение медианного фильтра (повтор той же строки с DeGrainMedian, возможно с меньшими пределами), так как он очень быстр.

#Пример скрипта 11.2
#Фильтрация чересстрочного видео с более сильным подавлением шума.
LoadPlugin("C:PluginsDeGrainMedian.dll") # загружаем плагин
AviSource("d:videofilm.avi") # открываем видеофайл
DeGrainMedian(mode=1,interlaced=true,norow=true,limitY=2,limitUV=4)
# каскадное (повторное) применение
DeGrainMedian(mode=1,interlaced=true,norow=true,limitY=2,limitUV=4)

Однако это скорее исключение. В среде профессионалов обычно распространено негативное отношение к скриптам верстки отдельных любителей, в которых нагромождено несколько фильтров подавления шума. Обычно это приводит к излишнему замыливанию картинки и накоплению артефактов. Ранее часто использовались последовательности из отдельного пространственного и отдельного временного фильтра, но с появлением более эффективных пространственно-временных (начиная с легендарного Convolution3D разработки Vlad59), это, пожалуй устарело.

По мнению многих, наиболее эффективным фильтром подавления шума в настоящее время является FFT3DFilter. В отличие от большинства других фильтров, он работает не с отдельными несколькими соседними точками, а с большими областями (блоками) в смежных кадрах, анализируя спектр их частот и подавляя слабые. Он не просто подавляет шум, но и улучшает изображение, например, может сделать линии более ровными.

#Пример скрипта 11.3
#Фильтрация DV чересстрочного видео
LoadPlugin("C:Pluginsfft3dfilter.dll") # загружаем плагин
AviSource("d:videofilm.avi") # открываем видеофайл
FFT3DFilter(sigma=1.5, plane=4, interlaced=true) #фильтруем все

Параметр "plane" определяет, какие цветовые плоскости фильтровать (0 - только яркость; 1 - только U; 2 - только V; 3 - только обе цветности U,V; 4 - все). Их можно фильтровать с разной силой, определяемой параметром "sigma".

#Пример скрипта 11.4
#Фильтрация DV чересстрочного видео
LoadPlugin("C:Pluginsfft3dfilter.dll") # загружаем плагин
AviSource("d:videofilm.avi") # открываем видеофайл
fft3dfilter(sigma=3, plane=3) # фильтруем цветность
fft3dfilter(sigma=2, plane=0) # фильтруем яркость с меньшей силой

Последовательное применение двух временных фильтров увеличивает временной радиус действия, что может быть существенно в случае компенсации движения (смотри ниже раздел 16). Решением в нашем случае может быть разделение цветовые компонент, их независимая фильтрация с разной силой, а затем объединение с помощью хитрого метода (автор — "AI").

#Пример скрипта 11.5
#Фильтрация DV чересстрочного видео
LoadPlugin("C:Pluginsfft3dfilter.dll") # загружаем плагин
AviSource("d:videofilm.avi") # открываем видеофайл
YToUV(fft3dfilter(sigma=2.5, plane=1, interlaced=true).UToY(),
fft3dfilter(sigma=3, plane=2, interlaced=true).VToY(),
fft3dfilter(sigma=2, plane=0, interlaced=true)

Попутно вы видите, как в скрипте можно записать длинные строки с помощью символа продолжения строки «».

Если обе цветовых компоненты фильтруются одинаково, можно использовать и более простой вариант для раздельной фильтрации яркости и цветности и их объединения с использованием функций MergeChroma или MergeLuma.

#Пример скрипта 11.6
#Фильтрация DV чересстрочного видео
LoadPlugin("C:Pluginsfft3dfilter.dll") # загружаем плагин
AviSource("d:videofilm.avi") # открываем видеофайл
MergeChroma(fft3dfilter(sigma=2, plane=0, interlaced=true),
fft3dfilter(sigma=3, plane=3, interlaced=true))

При высоком уровне импульсного шума полезна предварительная фильтрация с помощью медианного фильтра.

#Пример скрипта 11.7
#Фильтрация шумного аналогового чересстрочного видео
LoadPlugin("C:PluginsDeGrainMedian.dll") # загружаем плагин
LoadPlugin("C:Pluginsfft3dfilter.dll") # загружаем плагин
AviSource("d:videofilm.avi") # открываем видеофайл
# фильтруем грубо, горячие пикселы
DeGrainMedian(mode=1, interlaced=true, limitY=3, limitUV=5)
# фильтруем тонко, только яркость
FFT3DFilter(sigma=2, plane=0, interlaced=true)

Фильтр FFT3DFilter очень медленный ввиду большого объема вычислений, в последнем скрипте цветность им не фильтруется, что несколько ускоряет обработку. В качестве компромисса для фильтрации цветности возможно применение и других фильтров, например, CNR2.

Возможностью повысить скорость обработки является применение плагина FFT3DGPU (разработчик "tsp"), использующего процессор современной видеокарты (DirectX9) вместо центрального процессора. Он разработан на основе FFT3DFilter и в версии 6.2 поддерживает почти все, кроме чересстрочности и YUY2. Интересной возможностью является их комбинация для обработки разных цветовых плоскостей, причем обработка может производиться параллельно (для повышения эффективности распараллеливания, медленные фильтры желательно ставить до FFF3DGPU).

#Пример скрипта 11.8
#Фильтрация DV видео совместно с процессором видеокарты
LoadPlugin("C:Pluginsfft3dfilter.dll") # загружаем плагин
LoadPlugin("C:Pluginsfft3dGPU.dll") # загружаем плагин
AviSource("d:videofilm.avi") # открываем видеофайл
ConvertToYV12(interlaced=true) # преобразуем цвет для FFT3DGU
AssumeBFF() # первое поле - нижнее для DV
SeparateFields()
# разделим на поля, fft3dGPU v.6.2 не работает с чересстрочным
# выделим четные и нечетные поля и обработаем их раздельно
Even=SelectEven().FFT3DFilter(sigma=3, plane=3)
.FFT3DGPU(sigma=2, plane=0)
Odd =SelectOdd().FFT3DFilter(sigma=3, plane=3)
.FFT3DGPU(sigma=2, plane=0)
Interleave(Even, Odd) # чередуем четные и нечетные
Weave() # соединим поля в кадры

Яркость мы фильтруем с помощью FFT3DGPU, а цветность — FFT3DFilter (можно и наоборот, или вообще все фильтровать в GPU). Для краткости использована объектно-ориентированная запись (с точкой), в которой первым аргументом правой функции является результат (выходной клип) более левой.

В вышеприведенном скрипте мы преобразовали цветовой формат в YV12, так как FFT3DGPU пока работает только в нем. В принципе, можно написать скрипт, в котором фильтрация цвета будет и в YUY2.

#Пример скрипта 11.9
#Фильтрация аналогового чересстрочного видео # совместно с процессором видеокарты
LoadPlugin("C:Pluginsfft3dfilter.dll") # загружаем плагин
LoadPlugin("C:Pluginsfft3dGPU.dll") # загружаем плагин
AviSource("d:videofilm.avi") # открываем видеофайл
ConvertToYUY2 (interlaced=true) # если он еще не YUY2
AssumeTFF() # первое поле - верхнее для аналога
SeparateFields()
# разделим на поля, fft3dGPU v.6.2 не работает с чересстрочным
# выделим четные и нечетные поля и обработаем их раздельно
Even=SelectEven().FFT3DFilter(sigma=3, plane=3)
Even=Even.ConvertToYV12().FFT3DGPU(sigma=2, plane=0)
.ConvertToYUY2().MergeChroma(Even)
# заменили цветность на результат FFT3DFilter
Odd =SelectOdd().FFT3DFilter(sigma=3, plane=3)
Odd=Odd.ConvertToYV12().FFT3DGPU(sigma=2, plane=0)
.ConvertToYUY2().MergeChroma(Odd)
# заменили цветность на результат FFT3DFilter
Interleave(Even, Odd) # чередуем четные и нечетные
Weave() # соединим поля в кадры

В ряде случаев лучше использовать другие фильтры, отвечающие типу источнику и виду помех. В частности, при фильтрации мультфильмов полезно учесть наличие строго повторяющихся дублей кадров (обычно число разных рисунков меньше частоты кадров). Существует плагин Dup (разработчик Donald Graft), который анализирует поток, и, находя цепочку последовательных дублей, может их полностью смешивать (усреднять), и всю цепочку заменить точными повторениями, что эффективно подавляет шум практически без влияния на детали, без призраков от соседних кадров, и облегчает задачу сжатия.

#Пример скрипта 11.10
#Фильтрация мультфильмов с дублями кадров
LoadPlugin("C:Pluginsfft3dfilter.dll") # загружаем плагин
LoadPlugin("C:PluginsDup.dll") # загружаем плагин
AviSource("d:videofilm.avi") # открываем видеофайл
# подразумеваем, что чересстрочности нет
Dup(threshold=3) # фильтруем дубли

Нужно подобрать значения порога threshold, в зависимости от уровня шума, чтобы исключить как ложные пропуски дублей, так и ненужную фильтрацию в действительности разных (но похожих) кадров. Фильтр имеет дополнительные параметры для отладки. При необходимости ему должен предшествовать деинтерлейс. При недостаточности обеспечиваемой фильтрации (особенно не дублированных кадров с быстрым движением) можно попробовать применить и дополнительные фильтры.

12. Сравнение действия фильтров

Практически всегда задаются вопросы, какой фильтр (например, шумоподавитель) применить, и с какими настройками. Можно последовать советам и рекомендациям, но целесообразно поверить все же своим глазам. Необходим детальный анализ действия приложенных фильтров на исходное видео. С помощью специальных команд AviSynth можно подготовить видео для просмотра и отладки.

Первой возможностью является формирование кадра из расположенных рядом исходного и отфильтрованного видео, и просмотр в VirtualDub или каком-либо плеере. AviSynth имеет команду StackHorizontal для расположения двух или более клипов по горизонтали, и StackVertical для расположения их по вертикали. При большом размере кадра результат не помещается на мониторе, тогда можно использовать предварительную обрезку.

#Пример скрипта 12.1
# Просмотр результата фильтрации рядом с исходным
Avisource("h: est.avi")
Crop(0,0,300,0) # обрежем справа
d=DeGrainMedian(mode=1,limitY=4)
StackHorizontal(last,d)

Загрузив скрипт в VirtualDubMod, подвинувшись на показательный кадр, можно менять значения параметров, например limitY, и обновляя экран по нажатию F5, наблюдать изменения. Скажем, при настройке подавителей шума следим, чтобы при уменьшении шума не удалялись существенные детали, и не размывались контуры.Часто изменения малозаметны, в этом случае полезно поместить рядом еще и разницу между исходным и фильтрованным клипом (командой Subtract), причем еще лучше усиленную (например, командой Levels, параметры которой тоже можно подстроить).

#Пример скрипта 12.2
# Просмотр результата и разницы рядом с исходным
Avisource("h: est.avi")
Crop(0,0,300,0) # обрежем справа
d=DeGrainMedian(mode=1,limitY=4,limitUV=0,interlaced=true)
ds=Subtract(last,d).Levels(117,1,139,0,255)
# Усиленная разница фильтрованного с исходным
StackHorizontal(last, d, ds)

В примере скрипта мы фильтровали только яркость Y, но можно фильтровать и анализировать также и (или) цветность. Можно и сразу сравнить действие двух шумоподавителей, добавив еще окошко, или три, размещенных снизу.

#Пример скрипта 12.3
# Просмотр результата и разницы рядом с исходным
LoadPlugin("FluxSmoosth.dll)
LoadPlugin("DeGrainMedian.dll")
Avisource("h:
astya.avi")
assumetff()
separatefieds()
# сожмем для недеформированного вида
lanczosresize(width/2,height)
Crop(100,0,200,288) # обрежем для уменьшения
d=DeGrainMedian(mode=1,limitY=3,limitUV=3,interlaced=false)
ds=subtract(last,d).Levels(117,1,139,0,255)
# Усиленная разница
f=FluxSmoothST(7,7) # другой фильтр
fs=Subtract(last,f).Levels(117,1,139,0,255)
# Усиленная разница другого
StackVertical(StackHorizontal(last, d, ds),
StackHorizontal(last, f, fs))

Один из получившихся кадров результата приведен на рисунке.

Фильтры работают по-разному, хотя оба они пространственно-временные. Вверху — DeGrainMedian, внизу — FluxSmoothST. Справа, на картинах разности, то есть удаляемого шума, видно, что ниже и выше движущейся вверх Настиной руки FluxSmoothST оставил ее следы (призраки) от соседних кадров. Средняя часть руки на границу света и тени не фильтруется (равномерно серая область на картине разности). DeGrainMedian (картинка вверху) сильнее фильтрует лицо и складки одежды на плече, смягчая детали.

Общий шум оба фильтра фильтруют неплохо, но DeGrainMedian удаляет более неоднородный шум.

Другим способом визуальной оценки является поочередный показ кадров по-разному отфильтрованного клипа. Так как при этом положение объектов не меняется, легко следить за какой-либо деталью без перевода взгляда. Используется функция Interleave. Чтобы не запутаться, можно нанести на отфильтрованные клипы надписи функцией Subtitle.

#Пример скрипта 12.4
# Просмотр результатов с чередованием
Avisource("h: est.avi")
d1=DeGrainMedian(mode=1,limitY=4,limitUV=0,interlaced=true)
.Subtitle("DeGrainMedian mode=1) # фильтрация
d1s=subtract(last,d1).Levels(117,1,139,0,255)
# Получили усиленную разницу
d2=DeGrainMedian(mode=2,limitY=4,limitUV=0,interlaced=true)
.Subtitle("DeGrainMedian mode=2) # фильтрация
d2s=Subtract(last,d2).Levels(117,1,139,0,255) # Усиленная разница
Interleave(last, d1, d2, d1s, d2s) # чередуем

Вычитание клипов вместо цепочки Subtract.Levels можно сделать и другими средствами, например, функцией YV12LUTxy плагина MVTools (для данного цветового формата).

Отметим, что существуют и специальные программы для оценки и сравнения видео (CompareAVS и др.). Возможна организация других сравнений, например чистого, искусственно зашумленного (плагином AddGrain от Tom Barry) и очищенного клипов, либо анализ эффектов повышения резкости и т.п.

13. Повышение резкости

Повышение резкости преследует цель подчеркнуть края объектов и повысить различимость деталей, которая была утрачена при трансляции, записи, фильтрации и т.д. Повышение резкости — это обычно локальное повышение контраста. Следует отметить, что повышение резкости ухудшает сжимаемость клипа, поэтому делать это надо осторожно. Также при этом обычно усиливается и шум, поэтому правилом является применение фильтров повышения резкости после фильтров подавления шума. Чаще всего затрагивают только канал яркости, а каналы цветности не изменяют. Некоторые используют повышение резкости не при кодировании, а при декодировании (просмотре), в том числе и с использованием фильтров AviSynth. Есть несколько методов повышения резкости. В AviSynth встроен фильтр Sharpen, реализующий простой метод. Есть также плагины ASharp (разработчик "MarkFD"), TUnsharp (разработчик "Tritical"), реализующие известный метод использования маски нерезкости. Недостатком классических (линейных) методов является сопутствующее повышения уровня шума, а также образование ореолов рядом с линиями. Есть и нелинейные методы. Имеется фильтр MSharpen (разработчик Donald Graft), который сначала находит края объектов, и повышает контраст только вблизи них, не повышая шум на ровных поверхностях. Разработаны также плагины aWarpSharp (MarkFD), WarpSharp (набор функций, разработчик — анонимный японец) и WarpSharp (разработчик "Sh0dan") и реализующие другой метод — повышение резкости деформацией изображения (стягиванием), что наиболее применимо для мультфильмов (анимэ). Имеется два (или три) плагина с функцией XSharpen, в которой повышение ограничено значением соседних пикселов.

Однако все эти методы несовершенны и портят картинку. Линейные методы образуют ореолы, нелинейные производят ступенчатые края у наклонных линий. Нет однозначного ответа на вопрос, что делать с (прореженной) цветностью (менять или нет), чтобы она пространственно соответствовала яркости. Известным способом достижения наилучших результатов является увеличение изображения (сверхразрешение — supersampling), скажем, в четыре раза, применение функции повышения резкости, и затем уменьшение размеров до первоначальных.

#Пример скрипта 13.1
# Качественное повышение резкости со сверхразрешением
LoadPlugin("C:PluginsWarpsharp.dll") # загружаем плагин
LoadPlugin("C:PluginsDeGrainMedian.dll") # загружаем плагин
AviSource("d:videofilm.avi") # открываем видеофайл
DeGrainMedian() # подавляем шум некоторым фильтром
ss=4 # вводим переменную - кратность увеличения размера кадра
LanczosResize(width*ss, height*ss) # увеличиваем размер кадров
XSharpen(strength=255,threshold=20) # повышаем резкость
LanczosResize(width/ratio, height/ratio) # восстанавливаем размер

В скрипте нужно настроить силу и порог повышения резкости по вкусу. При увеличении 4 ореолов нет, однако скорость обработки очень сильно падает. Да и шум все же усиливается.

В дидактических целях запишем этот же скрипт, введя пользовательскую функцию SSSharpen (язык AviSynth допускает это), которая вызывается аналогично внутренним функциям или функциям из плагинов. Сначала должно быть определение функции (с фигурными скобками), которое можно привести в том же файле, или записать его в отдельный файл, например, ssxsharpen.avs и использовать в начале основного скрипта команду Import("ssxsharpen.avs"), или именовать файл с расширением avsi, например, ssxsharpen.avsi, и поместить его в каталог автозагрузки плагинов.

#Пример скрипта 13.2
# Качественное повышение резкости с функцией SSXSharpen
# Определение функции SSXSharpen
function SSXSharpen(clip input, int "ssw", int "ssh", int "xstren", int "xthresh") {
##
## SSXSharpen (from SharpenTools by mf)
## Повышает резкость изображения используя сверхразрешение.
##
## Использование: SSXSharpen()
##
## Параметры (и их значения по умолчанию):
ssw=Default(ssw, 4) # горизонтальный масштабный фактор, от 0
ssh=Default(ssh, 4) # вертикальный масштабный фактор, от 0
xstren=Default(xstren, 255) #степень повышения резкости, 0-255
xthresh=Default(xthresh, 255) #порог повышения резкости, 0-255
##
input.LanczosResize(input.width*ssw, input.height*ssh)
XSharpen(xstren, xthresh)
LanczosResize(input.width, input.height)
}
###################################################
# Основной скрипт
LoadPlugin("C:PluginsWarpsharp.dll") # загружаем плагины
LoadPlugin("C:PluginsDeGrainMedian.dll")
AviSource("d:videofilm.avi") # открываем видеофайл
DeGrainMedian() # подавляем шум некоторым фильтром
# вызываем функцию с параметрами по умолчанию.
SSXSharpen(last, ssw=4, ssh=4, xstren=255, xthresh=20)

Скрипт работает очень медленно. Сделаны попытки ограничить чрезмерную степень повышения резкости для уже резких деталей, и уменьшить образование ореолов без большого сверхразрешения.

Популярен длинный скрипт, оформленный в виде пользовательской функции LimitedSharpen (составитель Didee, см. http://forum.doom9.org/showthread.php?t=84196), копия находится в файле LimitedSharpen.avs в прилагаемом архиве avs.zip. Мы не будем его подробно разбирать, кратко отметим, что в функции находятся края объектов, размытое среднее значение соседних пикселов, делается простое повышение резкости, которое затем ограничивается. Функция использует плагин WarpSharp (японский) для повышения резкости (в одном из режимов), и плагин MaskTools (разработчики "Kurosu", "Manao"). Функции MaskTools часто используются в сложных скриптах, так как позволяет на основе масок и других математических операций реализовывать разнообразные алгоритмы обработки вместо разработки плагинов на языках программирования.

#Пример скрипта 13.3
# LimitedSharpen для ограниченного повышения резкости
# Пусть плагины WarpSharp, MaskTools в автозагрузке,
# а скрипт LimitedSharpen.avs в текущем каталоге
Import("LimitedSharpen.avs")
LoadPlugin("C:PluginsDeGrainMedian.dll") # загружаем плагин
AviSource("d:videofilm.avi") # открываем видеофайл
DeGrainMedian() # подавляем шум некоторым фильтром
# функция повышения резкости с параметрами по умолчанию.
LimitedSharpen()

Функция LimitedSharpen предназначена для прогрессивного видео и имеет несколько параметров для настройки ее действия.

  • "ss_x", "ss_y" - факторы промежуточного увеличения по горизонтали и вертикали (по умолчанию 1.5);
  • "dest_x", "dest_y" - конечная ширина и высота;
  • "Smode" - номер режима повышения резкости 1 - UnSharpMask, 2 - Sharpen, 3 - MinMaxSharpen (по умолчанию);
  • "strength" - сила повышения резкости (по умолчанию 100);
  • "radius" - радиус маски нерезкости для Smode=1 (по умолчанию 2),
  • "Lmode" - номер режима ограничения 1 - жесткое, вместе с "overshoot" (по умолчанию), 2- мягкое;
  • "wide" - false - использовать для ограничения мин. и макс. величины в области 3х3 краев объектов (по умолчанию), true - 5х5;
  • "overshoot" - насколько повышение резкости может переходить мин. и мах. пределы (1);
  • "soft" - true - слегка смягчить клип при нахождении мин. и макс. величин, false - нет (по умолчанию;
  • "edgemode" - режим обработки краев (0 - весь кадр, 1 -только края, 2 - кроме краев);
  • "special" - true - использовать специальный контрастный режим резкости для Smode=3;
  • "exborder" - ширина бордюров кадра, исключенная из обработки.

Есть также более быстрая модификаций функции LimitedSharpenFaster, включенная в состав разрабатываемой новой альфа-версии 2.0 плагина MaskTools.

Еще одна функция для умеренного повышения резкости включена в плагин FFT3DFilter. Используется фильтр высоких частот Гаусса с переменной частотой среза и некоторый специальный метод ограниченного повышения резкости: самые слабые частоты (с малыми амплитудами) не усиливаются, чтобы предотвратить увеличение шума; самые сильные частоты (с большими амплитудами) не усиливаются, чтобы предотвратить чрезмерное повышение резкости и образование ореолов. Степень повышения резкости максимальна для частот со средними амплитудами. FFT3DFilter дает более плавные переходы областей с разной степенью повышения резкости, чем LimitedSharpen. Что лучше, вопрос субъективный. Скорость обработки меньше, но при использовании FFT3DFilter и для подавления шума, повышение резкости почти не вносит дополнительного падения скорости.

#Пример скрипта 13.4
# Умеренное повышение резкости с FFT3DFilter
LoadPlugin("C:Pluginsfft3dfilter.dll") # загружаем плагин
AviSource("d:videovideo.avi") # открываем видеофайл
# канал цветности только фильтруем
FFT3DFilter(sigma=2, plane=3, interlaced=true)
# фильтруем и повышаем резкость канала яркости
FFT3DFilter(sigma=1.5, plane=0, interlaced=true, sharpen=0.7)

Вы можете управлять как общей силой повышения резкости, так и границами (см. документацию к FFT3DFilter).

14. Подавление ореолов

Близкой задачей к ограниченному повышению резкости является подавление уже имеющихся ореолов, которые и происходят из предшествующего "тупого" повышения резкости, и часто имеются на VHS и некоторых других источниках.

Существует специальный плагин FixVHSOversharp (разработчик "MrTibs"), состоящий из двух функций (для левого и правого края), работающих отдельно для каждой строки, то есть только в горизонтальном направлении, ищущих области с яркостью, отличающейся от яркости соседних областей. Параметрами являются: порог изменения яркости в ореоле, ширина области детектирования, и смещение рабочего пиксела от контрольного.

#Пример скрипта 14.1
# Подавление ореолов VHS
LoadPlugin("FixVHSOverSharp2_5.dll") # загружаем плагин
AviSource("d:videoVHS.avi") # видеофайл формата YUY2
FixVHSOversharpL(30,12,8) # левый край
FixVHSOversharp(30,14,10) # правый край

Отметим, что фильтр работает по довольно простому алгоритму, предназначен для сильных ореолов, и может в ряде случаев произвести артефакты, в частности на контрастных титрах.

Делался ряд попыток составить специальные скрипты для более эффективного удаления ореолов, из которых, пожалуй, наиболее удачным (и последним), являетcя Dehalo_alpha (составитель "Didee"), несмотря на статус версии "альфа". Скрипт использует плагин MaskTools (разработчики "Kurosu", "Manao") и плагин Repair из пакета RemoveGrain (разработчик "Kassandro").

# Пример скрипта 14.2
# Определение функции DeHalo_alpha (составитель Didee)
function DeHalo_alpha(clip clp, float "rx", float "ry", float "darkstr",
float "brightstr", float "lowsens", float "highsens", float "ss")
{
rx = default( rx, 2.0 )
ry = default( ry, 2.0 )
darkstr = default( darkstr, 1.0 )
brightstr = default( brightstr, 1.0 )
lowsens = default( lowsens, 50 )
highsens = default( highsens, 50 )
ss = default( ss, 1.5 )
#
LOS = string(lowsens)
HIS = string(highsens/100.0)
DRK = string(darkstr)
BRT = string(brightstr)
ox = clp.width()
oy = clp.height()
uv = 1
uv2 = (uv==3) ? 3 : 2
#
halos = clp.bicubicresize(m4(ox/rx),m4(oy/ry))
.bicubicresize(ox,oy,1,0)
are = yv12lutxy(clp.expand(U=uv,V=uv),
clp.inpand(U=uv,V=uv),"x y -","x y -","x y -",U=uv,V=uv)
ugly = yv12lutxy(halos.expand(U=uv,V=uv),
halos.inpand(U=uv,V=uv),"x y -","x y -","x y -",U=uv,V=uv)
so = yv12lutxy( ugly, are,
"y x - y 0.001 + / 255 * "+LOS+" - y 256 + 512 / "+HIS+" + *")
lets = maskedmerge(halos,clp,so,U=uv,V=uv)
remove = (ss==1.0) ? clp.repair(lets,1,0)
: clp.lanczosresize(m4(ox*ss),m4(oy*ss))
.logic(lets.expand(U=uv,V=uv)
.bicubicresize(m4(ox*ss),m4(oy*ss)),"min",U=uv2,V=uv2)
.logic(lets.inpand(U=uv,V=uv)
.bicubicresize(m4(ox*ss),m4(oy*ss)),"max",U=uv2,V=uv2)
.lanczosresize(ox,oy)
them = yv12lutxy(clp,remove,
"x y < x x y - "+DRK+" * - x x y - "+BRT+" * - ?",U=2,V=2)
#
return( them )
}
# вспомогательная функция
function m4(float x) {return(x<16?16:int(round(x/4.0)*4))}

Функция находит области ореолов путем сравнения результата расширения и сужения масок цветовых каналов в оригинальном и сглаженном путем ресайза кадрах, и так далее... Новичкам необходимо знать, что в этом и других сложных скриптах часто используют полезную функцию YV12LUTxy из плагина MaskTools, которая производит попиксельные вычисления результата, исходя из значений пикселов в кадрах двух клипов-аргументов (х и y), при этом формула вычисления задается строкой в обратной записи (например, "x y -" означает из пикселов первого клипа X вычесть значения второго Y).

Можно иметь функцию DeHalo_alpha в отдельном файле DeHalo_alpha.avs, и затем импортировать в основной скрипт. Функция имеет следующие параметры:

  • "rx" , "ry" - радиусы по горизонтали и вертикали для удаления ореолов (от 1 до 3, по умолчанию 2);
  • "darkstr", "brightstr" - факторы степени для темных и светлых ореолов (от 0 до 1.0 нестрого, по умолчанию 1.0);
  • "lowsens" - чувствительность к слабым изменениям, полностью принимаемым (от 0 до 100, по умолчанию 50);
  • "highsens" -чувствительность к сильным изменениям, полностью отвергаемым (от 0 до 100, по умолчанию 50);
  • "ss" - фактор промежуточного сверхразрешения для избежания ступенек (по умолчанию 1.5)

Функция DeHalo_alpha разрабатывалась для прогрессивного видео цветового формата YV12. Чересстрочное видео необходимо предварительно разделить на поля, и целесообразно уменьшить вертикальный радиус ореола вдвое.

# Пример скрипта 14.4
# Удаление ореолов с функцией Dehalo_alpha
LoadPlugin("MaskTools.dll")
LoadPlugin("RepairS.dll")
Import("Dehalo_alpha.avs") # импортируем функцию в скрипт
AviSource("d:videoVHS.avi") # видеофайл (VHS) формата YUY2
ConvertToYV12(interlaced=true)
SeparateFields() # делим на поля
Dehalo_alpha(rx=2.0, ry=1.0) # уменьшаем вертикальный радиус,
# так как поля половинной высоты
Weave()

По всей видимости, подавление шума лучше делать до удаления ореолов, для более четкого их нахождения. Применение функции подавления ореолов может смазать некоторые детали изображения. Попробуйте подобрать оптимальные параметры.

Отметим, что возможны и другие решения проблемы, например, в частотной области с плагином FFT3DFilter. Пока они не отработаны, но как предварительный вариант попробуйте вместо DeHalo_alpha следующую команду, использующую повышение резкости с обратным знаком для понижения высоких частот с большой амплитудой:
fft3dfilter(bt=-1,sharpen=-1.5,smin=200,smax=90000,scutoff=0.45,interlaced=true).
Снижение резкости и ореолов более плавное, чем в Dehalo_alpha. Возможно, скоро в FFT3DFilter появится и специальная опция "dehalo", что может позволить чистить шумы, повышать резкость и подавлять ореолы одной командой.

15. Подавление радужных полос

Из многообразия дефектов видео рассмотрим встречающиеся при обработке аналоговых сигналов радужные полосы, наблюдаемые в местах с высоким контрастом яркости, часто на титрах. Дефекты эти свойственны композитному (смешанному) сигналу, из-за перекрестного влияния яркости и цветности, если не используется качественный аппаратный (так называемый гребенчатый) фильтр для подавления этих помех. Есть плагины GuavaComb (разработчик "Lindsey Dubb"), TComb (разработчик "tritical"), BiFrost (разработчик Fredrik Mellbin) для устранения подобных помех методом усреднения во времени соседних кадров (главным образом для NTSC, и только для статичных сюжетов). Другим методом является пространственное сглаживание подобных участков. В наиболее эффективном алгоритме Rainbow Killer («убийца радуг») сначала ищутся резкие края объектов в яркостном канале, а затем производится размытие каналов цветности вблизи найденных краев. Алгоритм реализован в скрипте-функции DeRainbow (составитель "sh0dan"). Используются плагины Msharpen (разработчик Donald Graft) для построения маски краев, MipSmooth (разработчик "sh0dan") для размытия, и MaskTools (разработчики "Kurosu", "Manao") для объединения. Отметим, что функция DeRainbow подразумевает прогрессивный входной клип формата YV12, для цветового формата YUY2 есть аналогичная функция DeRainbowYUY2. Для чересстрочного видео используйте разбивку на поля. Подавление шума (и повышение резкости) лучше делать после удаления радуги.

# Пример скрипта 15.1
# Функция DeRainbow (от sh0dan) для удаления радужных полос
# Использует плагины Msharpen, MipSmooth, MaskTools
function DeRainbow(clip org, int "thresh")
{
assert(org.isYV12(),"DeRainbow() requires YV12 input!")
# проверка формата с сообщением
thresh = default(thresh, 10)
# значения параметра порога по умолчанию =10
org_u = UtoY(org) # из цветности U в яркостный канал
org_v = VtoY(org) # из цветности V в яркостный канал
msharpen(org, threshold = thresh, mask=true)
# маска резких краев
bilinearresize(last.width/2, last.height/2)
# маска половинной высоты
greyscale() # в градации серого
uv = blur(1.5).levels(0,2.0,255,0,255, coring=false)
.blur(1.5).blur(1.5).levels(50,2.0,255,0,255, coring=false)
# расширяем в маске найденные края
filtered_u = org_u.mipsmooth(spatial=255, temporal=255,
scenechange=3 ,show=false, method="strong", scalefactor=0.5)
# размываем бывший канал цветности U
filtered_v = org_v.mipsmooth(spatial=255, temporal=255,
scenechange=3 ,show=false, method="strong", scalefactor=0.5)
# размываем бывший канал цветности V
u_final = MaskedMerge(org_u, filtered_u, uv)
# заменяем U на размытый там где маска
v_final = MaskedMerge(org_v, filtered_v, uv)
# заменяем V на размытый там где маска
return YtoUV(u_final, v_final, org)
# заменяем U, V оригинала на фильтрованные
}
########################################################
# Функция для удаления радужных полос для формата YUY2
function DeRainbowYUY2(clip org, int "thresh")
{
assert(org.isyuy2(),"DeRainbowYUY2() requires YUY2 input!")
thresh = default(thresh, 10)
org_yv12 = org.converttoyv12()
# преобразуем в YV12 для MaskTools и скорости
org_u = utoy(org).converttoyv12()
org_v = vtoy(org).converttoyv12()
msharpen(org_yv12, threshold = thresh, mask=true)
bilinearresize(last.width/2, last.height)
greyscale()
uv = blur(1.5).levels(0,2.0,255,0,255, coring=false)
.blur(1.5).blur(1.5).levels(50,2.0,255,0,255, coring=false)
filtered_u = org_u.mipsmooth(spatial=255, temporal=255,
scenechange=3,show=false,method="superstrong",scalefactor=0.5)
filtered_v = org_v.mipsmooth(spatial=255, temporal=255,
scenechange=3,show=false,method="superstrong",scalefactor=0.5)
u_final = MaskedMerge(org_u, filtered_u, uv).converttoyuy2()
v_final = MaskedMerge(org_v, filtered_v, uv).converttoyuy2()
return ytouv(u_final, v_final, org)
}
########################################################
LoadPlugin("C:PluginsDeGrainMedian.dll") # загружаем плагин
AviSource("d:videovideo.avi")
# видеофайл, пусть формат YUY2 чересстрочный
A=Trim(0,1234) # пусть первая часть клипа без радуги
B=Trim(1235,4567) #пусть вторая часть клипа, имеется радуга
C=Trim(4568,0) # пусть третья часть клипа до конца - без радуги
B=SeparateFields(B) # разделяем на поля
B=DeRainbowYUY2(B,10) # подавляем радугу в клипе B
B=Weave(B) # соединяем поля
A ++ B ++ C # объединяем клипы (с синхронизацией)
DeGrainMedian(limity=2,interlaced=true) # подавляем шум
SeparateFields() # разделяем на поля
LimitedSharpen() # повышаем резкость
Weave() # соединяем поля

16. Компенсация движения

Оценка движения и его компенсация — сложный способ повышения качества обработки при понижении шума, деинтерлейсе, изменении частоты (а в кодировщиках в MPEG эта информация используется для повышения степени сжатия).

Рассмотрим, например, случай проводки камеры (панорамирования) при съемке и ее влияние на динамическое понижение шума. При этом все объекты в соседних кадрах не совпадают по расположению, поэтому глупый алгоритм фильтрации (усреднения) даст призраки по всему кадру, а умный алгоритм будет вынужден уменьшить степень фильтрации также почти по всему кадру. Если же мы сдвинули бы предыдущий кадр на величину перемещения камеры, то почти все объекты совпали бы, и эффективность понижения шума значительно увеличилась.

Такое глобальное движение (смещение, зум, вращение) позволяет оценить и компенсировать плагин DePan (разработчик "Fizick"), который включает функцию-сервер оценки движения DepanEstimate, производящую клип в специальном формате со вставленными в первые строки данными о движении, и несколько функций-клиентов, использующих эти данные для компенсации.

#Пример скрипта 16.1
# Шумоподавление с компенсацией глобального движения
LoadPlugin("Depan.dll")
LoadPlugin("DeGrainMedian.dll")
AviSource("test.avi")
AssumeTFF() # для аналогового чересстрочного видео
SeparateFields()
M=DepanEstimate(trust=3) # спецклип M с данными по движению
DepanInterleave(data=M, prev=1, next=1) # утроенное число кадров
DeGrainMedian() # некоторый шумопонижающий фильтр
Selectevery(3,1) # выделим из каждых трех один кадр
Weave()

В скрипте использована функция DePanInterleave, которая для каждого текущего кадра подает на выход тройку похожих кадров: скомпенсированный по движению вперед предыдущий, текущий и скомпенсированный по движению назад последующий. Совместно с последующей SelectEvery, они образуют как бы скобки (обкладки), внутри которых пишем временной (пространственно-временной) фильтр. Отметим, что такая обработка не имеет смысла с чисто пространственными фильтрами, для них компенсация не нужна, их можно указать до утроения. Еще обратим внимание, что для некоторых временных фильтров, с большим временным радиусом (больше одного кадра), нужно соответственно увеличить число компенсированных кадров в группе (параметрами prev, next), и соответственно изменить параметры SelectEvery. В частности, при последовательном применении двух временных фильтров их радиусы складываются.

#Пример скрипта 16.2
# Шумоподавление двумя фильтрами
# с компенсацией глобального движения
LoadPlugin("Depan.dll")
LoadPlugin("DeGrainMedian.dll")
LoadPlugin("FFT3DFilter.dll")
AviSource("test.avi")
AssumeTFF() # для аналогового чересстрочного видео
SeparateFields()
M = DepanEstimate(trust=3)
# получен спецклип M с данными по движению
DepanInterleave(data=M, prev=2, next=2)
# упятеренное число кадров, временной радиус фильтров равен 2
DeGrainMedian() # некоторый временной фильтр
FFT3DFilter() # второй временной фильтр
Selectevery(5,2) # выделим из каждых пяти второй кадр с 0
Weave()

Способ обработки чересстрочного видео неоднозначен. Возможно, например, выделить и отдельно анализировать и компенсировать четные и нечетные поля, но при этом увеличится временной интервал, то есть уменьшится похожесть изображений. Пожалуй, наиболее правильным является использования разумного Боб-деинтерлейса, создающего полноформатный выход с соудвоением частоты и, хотя при этом уменьшится скорость обработки. Кстати, функции DePanEstimate и DepanInterleve имеют ряд параметров для тонкой настройки, в частности, скорость оценки движения можно повысить установкой параметра fftw (с использованием и внешней библиотеки FFTW3.DLL).

#Пример скрипта 16.3
# Шумоподавление с компенсацией глобального движения
# и Bob-деинтерлейсом
LoadPlugin("Depan.dll")
LoadPlugin("LeakKernelDeint.dll")
LoadPlugin("DeGrainMedian.dll")
AviSource("test.avi") # пусть аналоговое чересстрочное
LeakKernelBob(order=1) # для TFF
AssumeTFF() # LeakKernelBob не сохраняет доминантность полей
M=DepanEstimate(trust=3, fftw=true)
# спецклип M с данными по движению
DepanInterleave(data=M,prev=1,next=1)#утроенное число кадров
DeGrainMedian() # некоторый шумопонижающий фильтр
Selectevery(3,1) # выделим из каждых трех один кадр
SeparateFields()
selectevery(4,0,3)#выделяем исходные не интерполированные поля
weave()

В приведенном скрипте при отсутствии шумоподавителя исходный клип передается на выход неизменным, а два уровня "скобки" (внешний Bob и внутренний Depan) стремятся сделать соседей фильтруемого кадра (поля) как можно более на него похожими.

Еще одним использованием глобального движения является такая его частичная компенсация, при которой происходит снижение тряски кадра, как в аппаратных стабилизаторах видеокамер. Один из простых алгоритмов стабилизации реализован в функции DepanStabilize.

#Пример скрипта 16.4
# Стабилизация тряски
LoadPlugin("Depan.dll")
LoadPlugin("DeGrainMedian.dll")
AviSource("test.avi")
AssumeTFF() # для аналогового чересстрочного видео
SeparateFields()
M=DepanEstimate(trust=3) # спецклип M с данными по движению
DepanStabilize(data=M, cutoff=1, mirror=15) # cтабилизация
Weave()
DeGrainMedian(interlaced=true) # фильтрация после стабилизации

Некоторую стабилизацию можно реализовать также с помощью плагина Motion (разработчик "mg262"), возможно также использования известного плагина DeShaker (разработчик Gunnar Thalin) для VirtualDub, с которым DePan имеет общий формат лог-файлов.

При помощи частичной компенсации глобального движения также можно построить кадры, соответствующие промежуточным моментам времени, что можно использовать, например, для повышения частоты кадров старых любительских узкопленочных фильмов, съемки панорам становятся более плавными.

Однако компенсация глобального движения эффективна не всегда, а только если движение действительно в основном глобальное. Если же движение объектов существенно разнится, то необходим анализ и компенсация локального движения, что реализовано в плагинах MVTools (разработчики "Manao", "Fizick") и Motion (разработчик "mg262"), которые ведут анализ поблочно. Плагин Motion высоко оптимизирован по скорости, но оценка движения более точна у плагина MVTools, который и будет описан в данной статье.

Использование компенсации локального движения для целей понижения шума аналогично рассмотренному использованию глобального движения. Для каждого блока в текущем кадре находится похожий на него блок в предыдущем, компенсацией пикселы ставятся на соответствующие места, и производится фильтрация. Впервые для AviSynth это было реализовано в известном плагине Dust (разработчик "Steady"), который был в свое время самым лучшим и медленным шумоподавителем. В плагине MVTools имеется встроенная функция понижения шума MVDenoise, но более универсальным решением является независимая компенсация движения и использование произвольного временного или пространственно-временного шумоподавителя.

#Пример скрипта 16.5
# Шумоподавление с компенсацией локального движения
LoadPlugin("MVTools.dll")
LoadPlugin("LeakKernelDeint.dll")
LoadPlugin("DeGrainMedian.dll")
AviSource("test.avi") # пусть аналоговое чересстрочное
LeakKernelBob(order=1) # Bob-деинтерлейс для TFF
AssumeTFF() # LeakKernelBob не сохраняет доминантность полей
Vf=MVAnalyse(isb=false, truemotion=true)
# спецклип Vf с векторами движения вперед
Vb=MVAnalyse(isb=true, truemotion=true)
# спецклип Vb с векторами движения назад
f=MVFlow(vectors=vf)
b=MVFow(vectors=vb)
Interleave(f, last, b)
DeGrainMedian() # некоторый временной шумопонижающий фильтр
Selectevery(3,1) # выделим из каждых трех один кадр
SeparateFields()
selectevery(4,0,3) # выделяем исходные не интерполированные поля
weave()

Плагин MVTools имеет в составе ряд функций, в частности для создания маски движения MVMask, для изменения частоты кадров MVFlowFps и др. Описание и простые базовые примеры их использования хорошо описаны в документации. Рядом пользователей составлены и более сложные скрипты с использованием MVTools, в частности с большим числом компенсированных кадров для сильного понижения шума.

Стоит обратить внимание и на попытки реализовать компенсированный по движению деинтерлейс, из которых наиболее удачной является скриптовая функция MVBob (составитель "scharfis_brain"), приведенная в файле mvbob.avs (вместе со вспомогательными функциями) в прилагаемом архиве avs.zip.

Она использует уже упоминавшиеся выше плагины MVTools, MaskTools, TomsMoComp, LeakKernelDeint, Eedi2, Undot и RemoveGrain, и имеет следующие именованные параметры:

"blksize" - размер блоков (по умолчанию =8)
"pel" - точность (по умолчанию =2, субпиксельная)
"th" - порог для коррекции ошибочной компенсации (по умолчанию =8)
"ths" - порог для коррекции статичных областей (по умолчанию =3)
"bobth" - порог деинтерлейса для клипа анализа движения (по умолчанию =6)
"quick" - предварительный боб - быстрый (по умолчанию =false, то есть медленный Eedi2, иначе – Tomsbob)

MVBob по назначению реализует Боб-деинтерлейс, и может быть использована для организации "обычного" деинтерлейса просто выбором, например, только четных кадров (или только нечетных, или попеременно).

#Пример скрипта 16.6
# Качественный деинтерлейс с компенсацией движения
LoadPlugin("MVTools.dll")
LoadPlugin("MaskTools.dll")
LoadPlugin("TomsMoComp.dll")
LoadPlugin("LeakKernelDeint.dll")
LoadPlugin("EEDI2.dll")
LoadPlugin("Undot.dll")
LoadPlugin("RemoveGrainS.dll")
# В оригинальном файла mvbob.avs был вызов всех плагинов,
# мы их там закомментировали
Import("mvbob.avs")
AviSource("test.avi") # пусть аналоговое чересстрочное
AssumeTFF() # Измените для DV
ConvertToYV12(interlaced=true) # пока поддерживается YV12
MVBob() # Боб-деинтерлейс с параметрами по-умолчанию
SelectEven() # выбрали четные кадры (ведущее поле четное).

Отметим, что алгоритмы анализа и компенсация движения не совершенны (плагины и скрипты находятся в процессе разработки), и возможны некоторые артефакты. Ряд защитных мер их по предотвращению уменьшает и без того невысокую скорость обработки.

17. Обработка звука

Наряду с обработкой изображений, AviSynth имеет ряд базовых возможностей и для обработки звука. Естественно, при вводе видеофайла считывается и звук. Точнее, он, как и видео, распаковывается, поэтому на выходе из AviSynth формат звука - всегда несжатый PCM. Следовательно, если вы, например, хотите перекодировать MPEG2 видео в MPEG2 и не хотите перекодировать звук, его надо заранее демультиплексировать (отделить от видео), и после очистки и кодирования видео - мультиплексировать (при сохранении длительности). Звук в общем случае привязан к видео, при нарезке видео отрезаются и соответствующие участки звука. Выше в скриптах мы использовали при объединении клипов оператор двойного плюса "++". Это эквивалент функции AlignedSplice, которая, в отличие от одиночного плюса (UnAlignedSplice), подрезает первую звуковую дорожку или вставляет тишину при необходимости, чтобы вторая звуковая дорожка оставалась синхронизированной с видео. Звук можно считывать и отдельно от видео с помощью команды WAVSource. Другие форматы аудио (AC3,DTS, MPA и др.) можно импортировать с помощью плагина NicAudio (разработчик "Nic"). В AviSynth имеются команды усиления Amplify, нормализации Normalize, задержки DelayAudio, эквалайзер SuperEQ, простого изменения частоты дискретизации ResamapleAudio и высококачественного изменения частоты дискретизации SSRC, и даже изменения скорости воспроизведения звуков без изменения высоты, и изменения высоты звуков без изменения длительности звука TimeStretch. Для многоканального звука есть выбор каналов GetChannel, и их добавление MergeChannels или смешивание MixAudio.

Рассмотрим в качестве примера задачу обработки любительского видео, когда надо к определенному отрезку подмешать для озвучивания некоторый музыкальный фон.

#Пример скрипта 17.1
# Подмешивание звука к видео
video = AviSource("test.avi") # источник видео
# видео содержит одноканальный моно звук с частотой 48 кГц
# приведем его в двухканальный (стерео) дублированием
video = MergeChannels(video, video)
# audio = WavSource("music.wav") # источник музыки
# предположим аудио содержит звук с частотой 44.1 кГц (CD)
# приведем его к частоте дискретизации 48 кГц
audio = audio.ResampleAudio(48000)
video # делаем Last равным video
trim(0,1000) ++ trim(1001,5000).MixAudio(audio, 0.5)
++ trim(5001,0)
# к средней части видео подмешали звук музыки

Плавного затухания или перетекания видео вместе со звуком можно добиться с использованием функции FadeIn и подобных.

Как и в случае с видео, существуют некоторые программы-утилиты, использующие AviSynth, в частности BeHappy (разработчик "dimzon") - основанный на AviSynth инструмент для транскодирования аудио.
Есть утилита командной строки Avs2wav (разработчик "Kassandro") для чтения AVS скриптов и генерации WAV файлов или WAV аудио потоков (на вход некоторых программ-кодировщиков).

Хочется закончить статью на мажорной ноте (имеется команда Tone), но если ничего не нравится и хочется тишины, то есть и команда полного удаления звука KillAudio. Кстати, последним достижением новейшей версии AviSynth 2.5.7 явилась команда KillVideo, позволяющая наконец довести обработку видео (в том числе удаление помех) до абсолютного идеала (в более старых версиях имелась лишь команда BlankClip, генерирующая черный экран и молчание :).

А еще что есть?

Кроме рассмотренных в настоящей статье, AviSynth имеет много других возможностей. Он неисчерпаем, как и атом (и любой язык, но надо учиться ...). Имеются, в частности, функции условного выполнения, также есть плагины для выполнения других специфических задач (например, реставрации старого видео, создания эффектов переходов, и т.д.). Советую ознакомиться с документацией, в том числе посмотреть "продвинутые" темы и описания плагинов, даже Вами не используемых - найдете много познавательного от квалифицированных авторов! Много полезной (хотя иногда противоречивой) информации можно найти в специализированных форумах. Официальный сайт это достаточно уникальное явление, хоть и не всегда понятное в навигации - Richard Berg сделал все его Wiki-страницы с возможностью редактирования посетителями, и вы можете, например, добавить страничку с описанием своего скрипта. Программистам с начальными знаниями C++ (или с некоторыми ограничениями Pascal, Delphi) не составит труда освоить AviSynth SDK и написать новый плагин для реализации своих собственных идей (проще чем для VirtualDub). Хоть формального полного описания SDK не существует, много информации есть на официальном сайте, а также в открытых исходниках имеющихся плагинов. Остальные, пробуйте силы в скриптописании!:)

Основные ссылки по теме:

  • Официальный сайт AviSynth: http://www.avisynth.org
  • Новый вход на сайт AviSynth с MediaWiki: http://www.avisynth.org/mediawiki/wiki/Main_Page
  • Страница проекта AviSynth и загрузки дистрибутива: http://sourceforge.net/projects/avisynth2
  • Коллекция плагинов: http://www.avisynth.org/warpenterprises (внимание - там не всегда последние версии, рекомендую добраться до домашних страниц авторов, используйте форумы и поиск.)
  • Русские ресурсы AviSynth и плагины разработки Fizick: http://avisynth.org.ru
  • Русскоязычная ветка форума "Экстремальный Ависинт": http://forum.ixbt.com/topic.cgi?id=29:9331
  • Англоязычный форум по использованию AviSynth: http://forum.doom9.org/forumdisplay.php?f=67
  • Англоязычный форум по разработке AviSynth: http://forum.doom9.org/forumdisplay.php?f=69

Рассмотренные в статье большие скрипты приведены в прилагаемом файле avs.zip, автор не является составителем данных скриптов.

Не стесняйтесь читать, пробовать, спрашивать, писать о достижениях и давать советы на форумах!

Автор благодарит AI за обсуждение черновика статьи.

Разместил Kernel

Дата публикации: 2006-05-02 (395 Прочтено)


Русский информационный портал о Virtual Dub

.: Карта Сайта :.
  • Главная
    • Домой
  • Документация
    • Функции
    • Фильтры
    • Помощь/Статьи
  • Файлы
    • Virtual Dub
    • Дополнения
    • Разное
  • Авторы
    • О нас
    .: Авторы проекта. Просим любить и жаловать :.
    Clawhammer Любит тестировать видео карточку в 3d Mark и игрушку Mafia. Любит различную видео-аудио-оргтехнику, имеет познания(иногда возможно поверхностные :) ) о любой электро штуковине. Не любит пиво. Предоставлял помещение для наших дружных слётов и горячих обсуждений. На себя взял непосильный труд информационного заполнения сайта. | Заполнение, техническая поддержка
Unpublished Большой души человек. Любит программировать на C++. Автор многих филосовских идей и мыслей. Черпает вдохновение в хорошем вине и компании друзей. (с) Илья | Дизайн, кодинг, заполнение
Илья Любит выпить и армию. Патриот. Говорит, что за друзей готов биться до последней капли крови. Проникся идеей джихада, слава богу пока только идеей. Спонсировал наши творческие способности и возможности. | Заполнение, перевод, моральная поддержка.

    Design & Coding - Unpublished (c), 2003


Русский информационный портал о Virtual Dub

.: Карта Сайта :.
  • Главная
    • Домой
  • Документация
    • Функции
    • Фильтры
    • Помощь/Статьи
  • Файлы
    • Virtual Dub
    • Дополнения
    • Разное
  • Авторы
    • О нас
    .: Дополнения для программы Virtual Dub :.
    Русификатор Русификатор для программы Virtual Dub 1.4.13. На русский переведены менюшки и окна. Help к сожалению остался не тронутым. Внимание ! Русификатор ТОЛЬКО для версии 1.4.13 к остальным версиям он не подходит. И вы можете просто испортить программу. | Скачать
VirtualDub external video filter SDK 1.05 Подбробная документация с примерами, заголовками по написанию фильтров для Virtual Dub | Скачать
VirtualDub Source Исходники программы Virtual Dub. Поставляются в соотвествии с GNU GENERAL PUBLIC LICENSE. | Скачать

    Design & Coding - Unpublished (c), 2003


Русский информационный портал о Virtual Dub

.: Карта Сайта :.
  • Главная
    • Домой
  • Документация
    • Функции
    • Фильтры
    • Помощь/Статьи
  • Файлы
    • Virtual Dub
    • Дополнения
    • Разное
  • Авторы
    • О нас
    .: Лирическое отступление :.
    Здесь представлены ряд фильтров для скачивания. Воспользоваться фильтром довольно просто. Скопируйте файл с расширением *.vdf (сам фильтр) в каталог с Virtual Dub. После этого запустите Virtual Dub, зайдите в меню выбора фильтров, нажмите Load и укажите путь к фильтру. По возможности я буду проверять все фильтры, которые выкладываю. Если случилось такое, что я вдруг не смог проверить фильтр, то буду специально оговаривать. К некоторым фильтрам также прилагаются исходники - мой совет, качайте. ;). Если что то не качается или возникли какие то проблемы с установкой или эксплуатацией фильтров пишите мне - Unpublished

    .: Собственно сами фильтры :.
    Lab Filter v1.1 | Цитата из описания к фильтру : Данный фильтр предназначен для тонкой коррекции цветовых искажений. Например, для коррекции цветов на некачественно сделанных DVD дисках. | 55 Kb Фильтр
XYZ Filter v1.0b | Фильтр делает примерно тоже самое, что и предыдущий. Тонкую разницу между ними я так и не уловил | 51 Kb Фильтр
Subtitler v2.4 | Накладывает субтитры на видео поток. Не проверял! | 54 Kb Фильтр Исходник
Smart Smoother IQ v0.6 | Если верить автору то данный фильтр убирает эффеки радуги, который часто встречается в аниме мультфильмах, например в AnimEigo's Bubblegum Crisis and Pioneer's Trigun. Работает в IQ (chrominance/"colour") | 33 Kb Фильтр Исходник
Smart Smoother High Quality | Фильтр выполняет сглаживание картинки, устраняет/смазывает шумы и артефакты, которые могли появиться при сжатии. Вот смотрите примеры - исходная картинка и обработанная фильтром | 417 Kb Фильтр Исходник
White Balance | Позволяет очень точно произвести настройку белого цвета в видео потоке. Очень полезно при засветленных DVD фильмах. | 32 Kb Фильтр
ShutDown | Забавный фильтр, если его конечно можно назвать фильтром. ;) Сам по себе он никакой коррекции не производит, а просто выключает компьютер после обработки видео. Вот так запросто - поставил компьютер на ночь какой нибудь сложный фильтр накладывать, а сам спать лег - этот фильтр за вас все сделает - работу завершит, компьютер выключит, и кофе по утру сварит :) | 27 Kb Фильтр Исходник
Pseudocolor | Вообще то предназначен для монохронного изображения, чтобы придать ему цветность(палитра цветности задается пользователем), но может накладываться и на цветное изображение, для предания различных интересных эффектов цветности. ;) | 121 Kb Фильтр Исходник

    Design & Coding - Unpublished (c), 2003


Русский информационный портал о Virtual Dub

.: Карта Сайта :.
  • Главная
    • Домой
  • Документация
    • Функции
    • Фильтры
    • Помощь/Статьи
  • Файлы
    • Virtual Dub
    • Дополнения
    • Разное
  • Авторы
    • О нас
    .: Описание основных функций Virtual Dub на русском языке :.

    Основные функции.

  • Резать/Клеить.
  • Наложение фильтров.
  • Наложение/сохранение звуковой дорожки.
  • Раскадровка видео фрагмента.

    Virtual Dub является одной из ведущих программ монтажа и обработки видео потока. С помощью этой программы, можно легко склеить два разных куска видео, наложить звуковую дорожку, вырезать ее. Также в программе есть множество фильтров, которые накладываются на весь видео поток. Рассмотрим эти и другие функции более подробно.

    Разрезать/клеить

    Этими функциями в основом и пользуются при работе с виртуал дубом. Функции не замысловаты, есть практически в любом редакторе видео, поэтому подробно я на них останавливаться не буду. Итак, чтобы вырезать какой либо кусок из видео потока, необходимо сначала выбрать начало этого куска. Перемещаем ползунок в нижней части программы в желаемое место (ползунок не всегда чутко реагирует на действия поэтому в данном случае удобно воспользоваться функцией go to - Edit->go to... и выбрать либо желаемый номер кадра или время видео на которое нужно переместиться) и выбираем Edit->set selection start или просто на клавиатуре давим клавишу Home. Далее отмечаем конец куска и выбираем Edit->set selection end или просто End. Далее сохраняем выбранный кусок в отдельный файл (File->save stripped avi). Теперь клеить. Клеить очень просто. Открываем один кусок, далее выбираем File->Append AVI segment и второй кусок автоматически прикрепляется к первому.

    Наложение фильтров

    Фильтров, которые можно накладывать на видео поток, в виртуал дубе огромное количество. Поэкспериментируйте. Наложить фильтр можно следующим образом - Video->Filters.., далее откроется окно. В этом окне нажмите Add (добавить фильтр), выберете фильтр, который вам нужен, нажмите ОК, отконфигурируйте фильтр и...все фильтр наложен. Можно накладывать внешние фильтры, т.е. фильтры, которых нет в Virtual Dub, но которые свободно распрастраняются по всему интернету. Для этого после кнопки Add нужно нажать Load, и выбрать расположение фильтра на жестком диске. Можно накладывать несколько фильтров одновременно. Удалять фильтры кнопкой Delete.

    Наложение/сохранение звуковой дорожки

    Довольно полезная и необходимая функция. Чтобы сохранить звуковую дорожку из видео потока нужно выбрать File->Save WAV..., указать путь для сохранения. Чтобы наложить - Audio->WAV Audio...

    Раскадровка видео фрагмента

    Выделяем фрагмент, с которым мы хотим работать (см. описание фун-ции Разрезать/Клеить) и выбираем в пункте меню File->Save image sequence. Откроется окошко для сохранения раскадровки. Остановимся здесь чуть дольше. Первый пункт - префикс. Приведу пример: если бы вы все оставили без изменений, все ваши файлы назывались xxxx.tga (или xxxx.bmp), где xxxx - номер кадра. А если вы добавите префикс к примеру avto_mazda , то все ваши файлы будут называться avto_mazdaxxxx.tga (или avto_mazdaxxxx.bmp), где хххх номер кадра соответственно. Второй пункт окошка. Тоже самое, только avto_mazda будет в конце. В этом пункте возможно сменить расширение файлов раскадровки. Ввести к примеру, что нибудь такое оригинальное, например расширение asu. 3-й пункт меню - значашие цифры. Хотите чтобы значащих цифр в названии файла было 13 - ставьте туда цифру 13, хотите 8-мь ставьте 8. 4-й пункт. Выбрать формат сохранения раскадровки - tga или bmp. 5-й пункт. Интересный пункт. Не сразу начинать раскадровку видео, а создать сценарий (он создается в папке с Virtual Dub) и позже загрузить его на выполнение.
    • .: Содержание :.
    Резать/Клеить
    Наложение фильтров
    Наложение/сохранение звуковой дорожки
    Раскадровка видео фрагмента
    .: Мнение :.
    Я думаю этот раздел несколько утратил актуальность. Да и не написано тут ничего особенного - это можно прочитать в хелпах, ну или догадаться самому. :) Я думаю открыть тут "железную" колонку, кою будет вести господин Clawhammer. Что вы на этот счет думаете?

    Design & Coding - Unpublished (c), 2003


Русский информационный портал о Virtual Dub

.: Карта Сайта :.
  • Главная
    • Домой
  • Документация
    • Функции
    • Фильтры
    • Помощь/Статьи
  • Файлы
    • Virtual Dub
    • Дополнения
    • Разное
  • Авторы
    • О нас
    .: Описание стандартных фильтров :.
    Обработка видео : описание основных фильтров

    2:1 reduction (high quality) - Уменьшает размер изображение по горизонтали и по вертикали ровно в 2 раза.

    3x3 average - Обрабатывает изображение, путем заменены каждого пикселя картинки на некоторый "средний пиксель", который получен после анализа соседних пикселей. :-)

    Blur и Blur more - В разной степени размывают изображение.

    Box blur - Настраиваемый фильтр размытия изображение. В настройках есть кнопка "Show preview", нажав которую можно сразу видеть результат работы фильтра.

    Brightness/Contrast - Позволяет изменить яркость и контрастность изображения.
    Deinterlace - Встроенный фильтр для устранения "гребенки". Честно говоря результат его работы мне не понравился, лучше пользоваться внешним фильтром "Smart deinterlace".

    Emboss - В Adobe Photoshop этот эффект называется "рельеф". Трудно на словах объяснить, что он делает, проще показать. :-)

    Flip horizontally - Перевернуть изображение по горизонтали.

    Flip vertically - Перевернуть изображение по вертикали.

    Grayscale - Делает изображение черно-белым.

    Invert - Инвертирует цвета.

    Levels - Фильтр позволяет корректировать уровень освещенности изображения. Предлагается, передвижением ползунков, выставить значение для самых темных/светлых пикселей, а так же некое среднее значение. Нажмите кнопку "Show Preview" что бы сразу следить за результатом работы фильтра. Так же, периодически, нажимайте кнопку "Sample frame", чтобы видеть гистограмму, по ней проще сориентироваться и проще выставить ползунки.

    Motion blur - Размывает движения. Переместившиеся объекты исчезают несразу.

    Null transform - Дословно : нулевая трансформация, т.е. сам по себе этот фильтр ничего не делает. Обычно он выбирается для подрезания неровных краев.

    Resize - Позволяет изменить размер картинки. Задайте новые размеры ширины и высоты. В списке "Filter mode" я обычно выбираю "Precise bicubic (A=-1.0)", можете поэкспериментировать и выбрать что-то на свой вкус. Нажмите кнопку "Show Preview" что бы следить за происходящим.

    Rotate - Поворачивает картинку на 90, 180 или 270 градусов.

    Rotate2 - Этот фильтр представляет более широкие возможности поворота картинки, здесь угол поворота, вы вписываете сами.

    Sharpen - Увеличивает контраст между сливающимися элементами в изображении, если попроще : увеличивает резкость изображения.

    Smoother - Размывает картинку. Фильтр позволяет задать степень размытия.

    Temporal smoother - Размывает картинку по времени. :-) Фильтр чем-то похож на "Motion blur", но эффект несколько другой.

    Threshold - Преобразует изображение в черно-белое (оттенки серого отсутствуют полностью).

    Это был всего лишь маленькй кусочек из русского help-а по VirtualDub. Полностью help можно взять отсюда
    .: Help на русском :.
    Нормальный полноценный русский хелп. Качайте тут

    Design & Coding - Unpublished (c), 2003


Русский информационный портал о Virtual Dub

.: Карта Сайта :.
  • Главная
    • Домой
  • Документация
    • Функции
    • Фильтры
    • Помощь/Статьи
  • Файлы
    • Virtual Dub
    • Дополнения
    • Разное
  • Авторы
    • О нас
    .: Немного о программе Virtual Dub :.
    Добрый день, вы находитесь на неофициальном сайте посвященном программе Virtual Dub. Я надеюсь, что вы найдете для себя много полезного и интересного. Virtual Dub это одна из программ обширной линейки программного обеспечения для монтажа и редактирования видео потока. Но Virtual Dub отличается, тем что имеет большой выбор инструментов, начиная от наложений звуковых дорожек и заканчивая наложением фильтров на видео поток(подробнее вы можете посмотреть здесь) при относительной простоте пользования.
    Чтобы работать с этой программой не обязательно быть проффесионалом. Достаточно запомнить минимальный набор функций и пользоваться ими. На этом сайте вы найдете все необходимое, для того чтобы изучить эту программу. Сайт будет интересен и тем кто уже давно пользуется Virtual Dub и тем кто не знает что это такое. Здесь вы найдете множество утилит, описаний к программе Virtual Dub, ну и конечно самую последнюю версию самой программы. Итак в добрый путь и да прибудет с вами Virtual Dub.
    P.S. Все файлы, за исключением Nimo Pack Codec выложенны прямо здесь. Так что никуда мои дорогие я вас посылать не буду. Все мною закаченно собственноручно, проверенно и упакованно - качайте.
    P.P.S. Кстати оЧепЯтоК и просто Ашибок может быть довольно много. Потому что вместе со мной, а точнее сказать параллельно со мной, родилась еще врожденная неграмотность. В общем то я на нее не сетую и мы прекрасно уживаемся вместе. Так что...необессудьте.
    .: Внимание! :.
    Гостевуха временно прекратила свое функционирование, если хотите, что-то спросить, высказать какие либо пожелания пишите мне сюда virtualdub@kulichki.com
    .: Обновление :.
    Ну вот сайт и обновился наконец. Что нового. Немного переиначил раздел фильтры. Теперь он выполнен в виде таблицы для удобства скачивания. Ну естественно добавил новые фильтры. Посмотрите - там есть и очень интересные экземпляры. Далее. Раздел Помощь теперь именуется, как Помощь/Статьи. Как из названия видно здесь я буду выкладывать различные статьи так или иначе связанные с VirtualDub-м. А пока сюда я положил описание и скриншоты с примерами работы стандартных фильтров. Далее. Я думаю раздел Функции нам не нужен и хочу вместо него сделать "железную колонку", которую будет вести некий тов. Clawhammer. Очень важно ваше мнение - высказывайтесь по этому поводу в Гостевой. В разделе "Разное" я добавил программу The JPEG Wizard v2.2. Что она делает смотрите в самом разделе, но скажу однозначно - must have. Вот. Впринципе все.
    P.S. Над сайтом и его заполнением тружусь только я один (хоть в разделе "О нас" и написано совсем другое ;)), поэтому его обновление и идет так тяжело. В ходе этого у меня предложение к вам кто хочет поработать "внештатным" сотрудником этого сайта ;) и может предложить мне какие либо интересные статьи и материалы на данную тематику я буду очень благодарен. Авторы! Помогите с развитием сайта - пишите мне сюда. Вот теперь все.

    19:33 06.03.04 - Unpublished
    .: Внимание! :.
    Сайт находится в состоянии переезда, поэтому некоторые ссылки могут не работать. Приношу свои глубочайшие изменения. И еще. Если вы тут были, если вам понравился сайт или наоборот не понравился оставьте пожалуйста сообщение в гостевой книге. Это очень важно для дальнейшей судьбы сайта.
    .: Новая Версия :.
    Новую версию Virtual Dub (сейчас она 1.5.10) вы можете скачать здесь или на сайте производителя www.virtualdub.org
    .: Help на русском :.
    Нашел и выложил новый русский help. На сайте он будет лежать только в запакованном виде. Я думаю так будет всем лучше. Хелп тут
    .: Исходники :.
    Здесь вы можете скачать исходники программы Virtual Dub. Они поставляются в соттветствии GNU лицензией.

    Design & Coding - Unpublished (c), 2003


Русский информационный портал о Virtual Dub

.: Карта Сайта :.
  • Главная
    • Домой
  • Документация
    • Функции
    • Фильтры
    • Помощь/Статьи
  • Файлы
    • Virtual Dub
    • Дополнения
    • Разное
  • Авторы
    • О нас
    .: Разные файлы, так или иначе относящиеся к обработке видео :.
    XiXit v0.99 Довольно забавная игрушка, с приятным 3D интерфейсом, для разминки пальцев и отдыха мозгов. Сам играю, и вам рекомендую. | Скачать
Flask В своем роде уникальная программа. По крайней мере аналогов-конкурентов у данной программы я не вижу. Конвертирует из формата *.vob (формат DVD) в формат *.avi(формат MPEG 4). Имеет множество настроек. Очень удобно. | Часть1 Часть2
DivX Pro v.5.0.2 Кодек, которым сейчас конвертят абсалютное большинство видео. Без него вряд ли у вас получится что нибудь посмотреть. | Часть1 Часть2 Часть3 Часть4
The JPEG Wizard v2.2 Оптимизирует JPEG-и. Меняет контраст, яркость и т.д. Оптимизирует в том смысле, что прямо на лету позволяет сосчитать выходной размер файла при данном сжатии. Т.е. все просто - вы двигаете ползунок конвертации, смотрите на качество картинки вверху и на размер слева, выбираете оптимальное соотношение размер/качество. Для веб-дезигнеров просто не заменимо. Весит данная чудо-прога 3,5 мегобайта. | Скачать

    Design & Coding - Unpublished (c), 2003


 Русский информационный портал о Virtual Dub
.: Карта Сайта :.
  • Главная
    • Домой
  • Документация
    • Функции
    • Фильтры
    • Помощь/Статьи
  • Файлы
    • Virtual Dub
    • Дополнения
    • Разное
  • Авторы
    • О нас
    .: Разные версии программы Virtual Dub. От старых до самых последних :.
    Virtual Dub 1.4.13 Virtual Dub версии 1.4.13 одна из самых распространенных версий. Именно на нее нужно ставить русификатор, который лежит в разделе Дополнения. | Скачать
Virtual Dub 1.5.2 В этой версии исправлены старые баги и добавлены новые возможности. | Скачать
Virtual Dub 1.5.10 Самая свежая и последняя версия Virtual Dub - 1.5.10 | Скачать

    Design & Coding - Unpublished (c), 2003